スクリプトを使用してbashでLS_COLORSを設定することはできません。

スクリプトを使用してbashでLS_COLORSを設定することはできません。

ランチャースクリプトを使用してLS_COLORS環境変数を設定しようとしています。ただし、この変数は設定されていません。

スピード

  1. ダウンロード済みLS_COLORS~/.dircolorsで

  2. 次へ追加TERM=xterm-newTerminalEmulator他の場所では学期変数は .dircolors で定義されています。

  3. ~/bin/ls に実行プログラムスクリプトを作成します。

  4. Shebangを使用してこのランチャースクリプトを入力し、eval括弧内の文字列をシェルにコマンドとして渡し、execすべてのプロセスを次のように置き換えますls

    #!/bin/sh eval $(dircolors -b ~/.dircolors) exec /bin/ls "$@"

  5. ~/bin/lsファイルを実行可能にします。

dir_colors のマニュアルページには次のように表示されます。

通常、ここで使用されるファイルは/etc/DIR_COLORSであり、ホームディレクトリの.dir_colorsファイルに上書きできます。

システム全体の/etc/DIR_COLORSスクリプトのみを使用することを考えると、これがうまくいかないのはなぜですか?

また

また、別名を次のlsように設定しました。エイリアス ls = "ls --color"何もecho $LS_COLORS表示されません。

システム仕様はfedora28とbashです。

修正する

作業を完了しましたが、色が好きではありません。デフォルトはそれだけでなく、より直感的です。LS_COLORS実行可能ファイルとシンボリックリンクを区別せず、これは重要な要素です。

答え1

ドキュメントはあいまいですが、環境変数を設定するだけでは十分ではありません。--colorオプションが必要です。オプション値がない場合、これは--color=always(ほとんどの人が期待し、--color=autoパイプラインで色を抑制する)に対応します。

--colorこのオプションの処理方法は、以下で確認できます。lsのソースコード、特に変数print_with_colorそして彼らの相互作用LS_COLORS

それにもかかわらず、返されたコマンドをeval評価するにはコマンドが必要であり、環境変数はにあります。あなたの例(追加のオプションを含む)はbashとdashの両方で動作します。exportdircolorsexec--color

答え2

サブシェルで dircolors を実行するため、変更はサブシェル内でのみ適用されます。

サブシェルは $( ... )

これをやってください...

alias ls="dircolors -b ~/.dircolors && ls"

関連情報