見出し画像

シェル先頭の#!/bin/bashとは何なのか

#!/bin/bash
#!/bin/csh
それに、#!/bin/csh -f
これらの違いをしっかり理解せず怪我をした。

教訓

・シェルの全ての行の意味、シェルを実行する際のコマンドの意味、実行したらどうなるのか、全て理解してから実行せよ

・実行前にサーバーが開発環境であることを確認せよ

・どんなに急かされても決して焦らず作業せよ

本題

【#!/bin/bash】と【#!/bin/csh】と【#!/bin/csh -f】の意味

#!/bin/bash
は、このスクリプトがバッシュで実行されることを期待しているの意味。

#!/bin/csh
は、このスクリプトがシーシェルで実行されることを期待しているの意味。

#!/bin/csh -f
は、このスクリプトがシーシェル(非対話モード)で実行されることを期待しているの意味だ。

たとえば冒頭に #!/bin/csh と記載された ccc.sh があるとする。

ちなみに拡張子は .csh とすべきだが、.sh でも解釈に影響しない。
これも良くない。混乱のもと。
#!/bin/cshと書いたなら、拡張子も.cshに。

これを、

sh ccc.sh で実行したら予期せぬ動作になる。

おそらく sh として動かそうとする。
これができてしまうのも良くない。
矛盾があるならエラーになるべきだと思う。
だがならないので、き、き、気を付けましょう。。

csh ccc.sh で実行したら csh として動く。

そして、
./ccc.sh で実行したら、
冒頭の#!/bin/csh 記載により csh として動く

シーシェルで書かれたものをバッシュとして動かさないようにするには、
冒頭の1行を確認し、それに合わせて実行するか、
./xxxで実行するのがよいでしょう。

ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?