ランチャースクリプトを使用してLS_COLORS環境変数を設定しようとしています。ただし、この変数は設定されていません。
スピード
ダウンロード済みLS_COLORS~/.dircolorsで
次へ追加TERM=xterm-newTerminalEmulator他の場所では学期変数は .dircolors で定義されています。
~/bin/ls に実行プログラムスクリプトを作成します。
Shebangを使用してこのランチャースクリプトを入力し、
eval
括弧内の文字列をシェルにコマンドとして渡し、exec
すべてのプロセスを次のように置き換えますls
。#!/bin/sh eval $(dircolors -b ~/.dircolors) exec /bin/ls "$@"
~/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の両方で動作します。export
dircolors
exec
--color
答え2
サブシェルで dircolors を実行するため、変更はサブシェル内でのみ適用されます。
サブシェルは $( ... )
これをやってください...
alias ls="dircolors -b ~/.dircolors && ls"