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