'setenv' コマンドは、明示的に呼び出されると tcsh シェルで動作しません。

'setenv' コマンドは、明示的に呼び出されると tcsh シェルで動作しません。

次のようにして、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 プログラムの呼び出しに置き換えます。

関連情報