sudoを使用してスクリプトを呼び出すと、shebangは無視されます。

sudoを使用してスクリプトを呼び出すと、shebangは無視されます。

sudoでスクリプトを呼び出すと、shebangは無視され、他のシェルでスクリプトが実行されます。テストのために、以下を含むスクリプト(test.sh)を作成しました。

#/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: `readlink /proc/$$/exe`"

まずスクリプトを呼び出します。sudoはできません:

$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash

次にスクリプトを呼び出します。Sudoと一緒に:

$ sudo ./test.sh
BASH is:
actual shell is: /bin/dash

私はこれを期待していませんでした。これは正常な行動ですか?

注:私はデフォルトのシェルがUbuntu(14.04)を使用しています。/bin/shシンボリックリンクですスプリント

答え1

あなたのシャバンはシャバンではありません。これは前髪のない彼女の一人だけです。

#!/bin/bash  

修正例:

$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ sudo ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ cat ./test.sh 
#!/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: `readlink /proc/$$/exe`"

答え2

あなたの例では、この!文字は省略されています。例えば#!/bin/bash

有効なハッシュバンラインがない場合は、次のようになります。基本シェル今すぐスプリント

関連情報