0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

bash, cshどちらからでもsourceできるスクリプトの書き方

Last updated at Posted at 2020-05-13

死んでも同じようなコードをふたつ書きたくないめんどくさがりな人向け。ネタです。

条件分岐

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
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?