web-dev-qa-db-ja.com

.bashrcを使用して、OS / XとLinuxの両方でlsに色を表示させることはできますか?

パーソナルマシンでOS/Xを実行し、リモートサーバーでLinuxを実行しています。 (Xserveがまだ作成されていても、Xserveを購入する余裕はありませんでした。)両方に同じ.bashrcファイルを使用したいのですが、実行可能ファイル、ディレクトリ、およびお気に入り。

しかし、LinuxのGNU lsは、--colorsコマンドラインスイッチを見たいと思っています。そうしないと、色の表示を拒否します。Apple(BSD?)lsは、export CLICOLORS=1 Shell変数を表示して、色を表示するように指示することを好みます。

両方を実行しますが、不明な--colorsスイッチが見つかった場合、Apple lsbarfs。

.bashrcに、lsがスイッチを受け入れるかどうかを検出し、それを--colorsでエイリアスするかどうかを決定する良い方法はありますか?

8
Brian

移植性のあることをしようとしているときは、プラットフォームではなく機能をテストしてください。

if ls --help 2>&1 | grep -q -- --color
then
    alias ls='ls --color=auto -F'
else
    alias ls='ls -FG'
fi

プラットフォームが変更されると、プラットフォームテストは中断します。 macOSは今日BSDとGNUユーザーランドツールの組み合わせを出荷していますが、この組み合わせは 時間の経過とともにシフト BSDツールのより多くの優位性に向かっています。したがって、「macOS」のテスト「Appleが依存していたGNUツールを、2つの実装が異なる機能に依存している場合は、最も近いBSDの同等のツールに置き換えると、今日は失敗する可能性があります。機能テストは、変更に直面しても機能し続けることがよくあります。

ボーナスとして、最初にテストしなかったプラットフォームのサポートを作成してしまうことがあります。上記のスクリプトフラグメントは、たとえばSolarisやFreeBSDでも正しく機能するはずです。

(ちなみに、これがGNU Autoconfの背後にある哲学です。そのため、10年前に書かれたconfigureスクリプトは、おそらく今日でもまったく新しいシステムで機能します。)

必要に応じてエイリアスを変更します。これを書いているときに、手元に最も近いmacOSおよびLinuxシステムで使用する値を示しています。

8
Warren Young

linuxかどうかを確認してから、lsを設定します。すなわち:

export CLICOLORS=1
if uname -a | grep Linux >/dev/null; then
  # your linux ls stuff
fi
2
rsm