Der Befehl „setenv“ funktioniert in der Tcsh-Shell nicht, wenn er explizit aufgerufen wird.

Der Befehl „setenv“ funktioniert in der Tcsh-Shell nicht, wenn er explizit aufgerufen wird.

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 shstandardmäß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/tcshin der ersten Zeile Ihres Skripts verwenden. Der echoBefehl 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 echoBefehl bei Bedarf durch einen Aufruf Ihres Python-Programms.

verwandte Informationen