
Ich kann den Befehl setenv problemlos in meiner tcsh-Shell wie folgt ausführen:
echo $0
/usr/bin/tcsh
echo $SHELL
/usr/bin/tcsh
setenv START_TIME `date +%s`
echo $START_TIME
1499355967
Aber wenn ich es explizit ausführe, wie unten gezeigt, funktioniert es nicht. Ich muss das tun, weil ich bei der Ausführung über einen Python-Unterprozessaufruf eine Shell angeben muss, sonst wird sh
standardmäßig eine Shell aufgerufen.
/usr/bin/tcsh -i -f -c 'setenv START_TIME `date +%s`'
echo $START_TIME
START_TIME: Undefined variable.
Was ist hier das Problem? Ich habe online nach diesem Problem gesucht, konnte aber kein ähnliches Problem finden. Das ist äußerst frustrierend.
Antwort1
Sie führen einen separaten Aufruf der Shell aus, wenn Sie /usr/bin/tcsh
in der ersten Zeile Ihres Skripts verwenden. Der echo
Befehl wird in der „umschließenden“ Shell ausgeführt – der Shell, die die Befehle enthält.
Warum nicht laufenbeideBefehle in der ersten Zeile, wie folgt:
/usr/bin/tcsh -i -f -c 'setenv START_TIME `date +%s`; echo $START_TIME'
Dann werden beide im selben Aufruf der Shell ausgeführt. Ersetzen Sie den echo
Befehl bei Bedarf durch einen Aufruf Ihres Python-Programms.