web-dev-qa-db-ja.com

PS1コマンドライン/端末のカラーコードはどこに保存すればよいですか?

この質問は、ベストプラクティスに関するものです。セキュアシェルを介してログインするか、ユーザーを切り替えるsusu -lは異なる効果があることを知っています。また、構成でタイプミスをした場合でも、ログインできるようにする必要があります。色の定義を保存するのに理想的な場所はどこにありますか?現時点では、.bash_profileにあります。それらを.bashrcに保存しても大丈夫ですか?

構成場所:

ArchWikiによると

  • /etc/profile/etc/profile.d/*.shおよび/etc/bash.bashrcのアプリケーション設定を取得します。
  • ~/.bash_profileユーザーごと、/etc/profileの後。
  • ~/.bash_login.bash_profileが見つからない場合)
  • ~/.profile.bash_profileが見つからない場合)
  • /etc/skel/.bash_profile~/.bashrcもソースします。
  • ~/.bash_logout
  • /etc/bash.bashrc-DSYS_BASHRC="/etc/bash.bashrc"コンパイルフラグに依存します。ソース/usr/share/bash-completion/bash_completion
  • ~/.bashrcユーザーごと、/etc/bash.bashrcの後。

2つの色の定義があります。1つはコマンドプロンプト用で、もう1つはlsコマンド用です。

set_Prompt () {
    Last_Command=$? # Must come first!
    Blue='\[\e[01;34m\]'
    White='\[\e[01;37m\]'
    Redbold='\[\e[01;31m\]'
    Greenbold='\[\e[01;32m\]'
    Greenlight='\[\e[00;32m\]'
    Blueintense='\[\033[00;96m\]'
    Purplelight='\[\e[00;35m\]'
    Yellowbold='\[\e[01;33m\]'
    Graydark='\[\e[01;90m\]'
    Reset='\[\e[00m\]'
    FancyX='\342\234\227'
    Checkmark='\342\234\223'

    PS1="${Graydark}\t "
    if [[ $Last_Command == 0 ]]; then
        PS1+="$Greenlight$Checkmark "
    else
        PS1+="$Redbold$FancyX "
    fi
    if [[ $EUID == 0 ]]; then
        PS1+="\\u@$Redbold\\h "
    else
        PS1+="$Greenlight\\u$White@$Redbold\\h "
    fi
    PS1+="$Graydark\\W $Redbold\\\$$Reset "
}
Prompt_COMMAND='set_Prompt'

set_ls () {
    Default='0;0'
    White='97'
    Yellowbold='01;33'
    Greenlight='00;32'
    Purplelight='00;35'
    Purplebold='01;35'
    Whitelight='00;37'
    Yellowlight='00;33'
    Graydark='00;90'
    # Highlight
    Highlightpurpledark='45'
    Highlightgraydark='100'
    LS_COLORS="fi=$Greenlight:di=$White;$Highlightgraydark:*.tex=$Purplebold"
    export LS_COLORS
}
set_ls
5
Jonathan Komar

環境変数は(エクスポートされると)サブシェルに継承され、シェルを呼び出すたびにリセットする必要がないため、.bash_loginまたは.bash_profileに配置します。それらをリセットすることは実質的に何の費用もかかるというわけではありませんが、サブシェルの期間中、envvarを他の何かに設定したい場合に備えて。 .bashrcが設定をオーバーライドする場合、これを行うのは困難です。

他のすべて(関数を含む)については、.bash_loginとその友達がサブシェルによって読み取られないため、それらを.bashrcに配置する必要があります。 .bashrcは通常、プロファイル/ログインスクリプトの1つを介して行われます。

もちろん、PS1を変更する関数が必要なため、PS1の使用方法は少し異なります。

(bashは初期化ファイルで少しおかしいです。ログインシェルはbash_profileとその仲間を読み取りますが、bashrcは読み取りません。非ログインシェルはまったく逆に機能します。したがって、bashrcがソースである場合を除き、すべてのシェル呼び出しで読み取られるファイルはありません。プロファイルスクリプト.ref。 https://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files

.profile、.bash_profile、.bash_loginのいずれかを選択するのは完全にあなた次第です。もちろん、グローバル構成とユーザーごとの構成のどちらを選択するかは、すべてのユーザーの動作を変更するか、1人だけを変更するかによって異なります。

タイプミスについては、シェルを開いたままにし、スクリプトを変更した後、スクリプトをテスト実行します。 :)単純なタイプミスが問題になるわけではありません。最悪の場合、initスクリプトの読み取りを停止したり、残りの設定を台無しにしたりします。何らかの理由で.bashrcに「出口」がない限り。

1
ilkkachu

質問は本質的に意見を求めているので、あなたは異なる答えを得るでしょう。たとえば、優れた設計手法では、特定の機能を提供するためにできるだけ少ない場所を使用します。シェル環境をカスタマイズするためにユーザーが行う作業の量を減らすために、このような情報をシステム領域に配置するものもあります。

私の環境では、ターミナルデータベースを使用し、この質問で提案されているエスケープシーケンスのハードコードされたリストの種類を可能な限り排除します。たとえば、私のディレクトリエディタでは、数字ではなくnamesを使用しています(LS_COLORSはまったく使用していません)。

enter image description here

BSDも同様に、 ls実装 でターミナルデータベースを使用しますが、「colorls」機能の構成可能性は低くなります。より構成可能ですが、GNU lsは、疑わしい結果をもたらします。たとえば、

TERM=vt100 dircolors

ショー

setenv LS_COLORS 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.Zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.Zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:'

which(ncurses FAQVT100で色を取得するにはどうすればよいですか?)を参照)は改善ではありません。

他の人は実際の色を取得するためにtput を使用し、複数の構成ファイルに情報を分散するのではなく、単一の環境変数(TERM)を介してカスタマイズを変更できるようにします。

カスタマイズをシステム領域に配置すると、更新がシステムに適用されるときにカスタマイズを維持するという欠点があります。さらに、いくつか(Fedoraのように)はすでにそこにあり(機能/ 256カラーターミナルを参照)、1つの変更を調整します以上のマシンが関与する可能性があります。

1
Thomas Dickey

エイリアス関数 のすべてをファイルに入れることをお勧めします。通常は~/.bash_aliasesです。

まだ存在しない場合は、.bashrc(または必要な場所)に次の行を追加できます。

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

Ubuntu .bashrcから取得したものですが、もちろんコメントは省略できます...
たとえば、Ubuntuでは標準ですが、そのような種類のファイルの使用はUbuntuよりも古いです...

注:
新しいマシンでアカウントを設定する方が快適です。

1
Hastur