死んでも同じようなコードをふたつ書きたくないめんどくさがりな人向け。ネタです。
条件分岐
ifの文法が異なっていて使えないので、test
と&&
、||
をつないで条件分岐する。
test 条件式 && 真の場合 || 偽の場合
変数の代入、出力
bashスタイルで代入してみて、エラーになったらcshスタイルで代入する。出力の仕方は同じ。
x=hoge >& /dev/null || set x=hoge
echo $x
環境変数の代入、出力
同じような感じ。cshでは変数と環境変数で名前空間が別のようだ。
export x=hoge >& /dev/null || setenv x hoge
printenv x
bash / csh判定
psコマンドでプロセスIDからコマンド名を調べる。これができれば後はbash用のスクリプトとcsh用のスクリプトを別に用意してここでsourceすれば良い。
ps -p $$ -o comm= | grep csh > /dev/null && echo これはcsh
ps -p $$ -o comm= | grep bash > /dev/null && echo これはbash
ヘルプを表示
bashの場合、sourceされたスクリプトから抜けるにはreturnを使う。cshにreturnはなく、エラーになるのでexitで抜ける。
test "$1" = "-h" && \
echo "Usage: source hoge [-h]" && \
echo " " && \
return >& /dev/null
test "$1" = "-h" && exit