
次のようにして、tcsh シェルで setenv コマンドを問題なく実行できます。
echo $0
/usr/bin/tcsh
echo $SHELL
/usr/bin/tcsh
setenv START_TIME `date +%s`
echo $START_TIME
1499355967
しかし、以下のように明示的に実行すると、動作しません。Python サブプロセス呼び出しで実行するときにシェルを指定する必要があり、そうしないとデフォルトでシェルが呼び出されるため、これを行う必要がありますsh
。
/usr/bin/tcsh -i -f -c 'setenv START_TIME `date +%s`'
echo $START_TIME
START_TIME: Undefined variable.
何が問題なのでしょうか? この問題についてオンラインで検索しましたが、これに似た問題は見つかりませんでした。非常にイライラします。
答え1
/usr/bin/tcsh
スクリプトの最初の行で を使用すると、シェルが別々に呼び出されます。echo
コマンドは、コマンドが含まれている「囲み」シェルで実行されます。
走らない理由両方最初の行にコマンドを次のように記述します。
/usr/bin/tcsh -i -f -c 'setenv START_TIME `date +%s`; echo $START_TIME'
すると、両方とも同じシェル呼び出しで実行されます。echo
必要に応じて、コマンドを Python プログラムの呼び出しに置き換えます。