パーソナルマシンでOS/Xを実行し、リモートサーバーでLinuxを実行しています。 (Xserveがまだ作成されていても、Xserveを購入する余裕はありませんでした。)両方に同じ.bashrcファイルを使用したいのですが、実行可能ファイル、ディレクトリ、およびお気に入り。
しかし、LinuxのGNU ls
は、--colors
コマンドラインスイッチを見たいと思っています。そうしないと、色の表示を拒否します。Apple(BSD?)ls
は、export CLICOLORS=1
Shell変数を表示して、色を表示するように指示することを好みます。
両方を実行しますが、不明な--colors
スイッチが見つかった場合、Apple ls
barfs。
.bashrcに、ls
がスイッチを受け入れるかどうかを検出し、それを--colors
でエイリアスするかどうかを決定する良い方法はありますか?
移植性のあることをしようとしているときは、プラットフォームではなく機能をテストしてください。
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システムで使用する値を示しています。
linuxかどうかを確認してから、ls
を設定します。すなわち:
export CLICOLORS=1
if uname -a | grep Linux >/dev/null; then
# your linux ls stuff
fi