今まではスクリプトの先頭に
今度はシェバンのシェルのパスを書き換えてみます。 ファイル名のみで実行してみると何も表示されないことがわかると思います。 今度は同じファイルを bash で実行してみます。これはバージョンが表示されます。 実行方法やシャバングなどの関係を以下にまとめてみました。
#!/bin/bash
と書いていました。
カレントシェルが bash の場合、実行権限を付与してスクリプトを直接実行すると正しい結果が得られます。
先ほどのスクリプトを bash 以外のシェルで実行してみます(ここでは zsh を使用していますが ksh などでもかまいません)。${BASH_VERSION}
は実行するシェルが bash の場合に設定されている変数であるため、それ以外のシェルでは何も表示されません。
今度はシェバンのシェルのパスを書き換えてみます。 ファイル名のみで実行してみると何も表示されないことがわかると思います。 今度は同じファイルを bash で実行してみます。これはバージョンが表示されます。 実行方法やシャバングなどの関係を以下にまとめてみました。
シェル | 実行方法 | 実行権限 | シェバン | 実行シェル |
---|---|---|---|---|
bash | ./gistfile1.sh |
要 | なし | bash |
./gistfile1.sh |
要 | #!/bin/bash |
/bin/bash | |
./gistfile1.sh |
要 | #!/bin/sh |
/bin/sh | |
bash ./gistfile1.sh |
不要 | なし |
bash | |
bash ./gistfile1.sh |
不要 | #!/bin/bash |
bash | |
bash ./gistfile1.sh |
不要 | #!/bin/sh |
bash | |
sh ./gistfile1.sh |
不要 | なし |
sh | |
sh ./gistfile1.sh |
不要 | #!/bin/bash |
sh | |
sh ./gistfile1.sh |
不要 | #!/bin/sh |
sh | |
sh | ./gistfile1.sh |
要 | なし |
sh |
./gistfile1.sh |
要 | #!/bin/bash |
/bin/bash | |
./gistfile1.sh |
要 | #!/bin/sh |
/bin/sh |
bash foo.sh
のように実行した場合、シェバンによるシェルの指定は無視されます。例えば、ソースファイルに含まれる configure
などのスクリプトを実行するときに #!/bin/sh
が記述されたものに対して zsh configure
として実行すると正しく動作しないかもしれません。