次の問題が発生しています。
test.sh と呼ばれるこの単純なスクリプトがあります。
#!/bin/bash
function hello() {
echo "hello world"
}
hello
シェルから実行すると、期待どおりの結果が得られました。
$ ./test2.sh
hello world
ただし、Python (2.7.?) から実行しようとすると、次のようになります。
>>> import commands
>>> cmd="./test2.sh"
>>> commands.getoutput(cmd)
'./test2.sh: 3: ./test2.sh: Syntax error: "(" unexpected'
bashではなく「sh」からスクリプトを実行すると思います。shで実行すると同じエラーメッセージが表示されるため、そう思います。
$ sh ./test2.sh
./test2.sh: 3: ./test2.sh: Syntax error: "(" unexpected
さらに、Python から前に「bash」を付けてコマンドを実行すると、次のように動作します。
>>> cmd="bash ./test2.sh"
>>> commands.getoutput(cmd)
'hello world'
#!/bin/bash
私の質問は次のとおりです。スクリプトの先頭に行を追加したにもかかわらず、python が bash ではなく sh を使用してスクリプトを実行することを選択するのはなぜですか? どうすれば正しくできますか(私のスクリプトは、私が制御できない離れたマシンによってPythonから実行されているため、Pythonで先行する「bash」を使用したくありません)。
ありがとう!