Wie kann ich Umgebungsvariablen für ein Programm festlegen, das mit "nohup" ausgeführt wird?

9

(Ich bearbeite ein vorhandenes Bash-Skript, also mache ich hier wahrscheinlich einen dummen Fehler ...)

Ich habe ein Shell-Skript, das einen Befehl mit einer Umgebungsvariablen als Argument wie folgt speichert:

COMMAND="mvn clean install -P $MAVEN_PROFILE"

Anschließend wird der Befehl nohupungefähr wie folgt ausgeführt:

nohup $COMMAND > logfile

Das funktioniert.

Jetzt möchte ich eine Umgebungsvariable festlegen, auf die in Maven zugegriffen werden kann. Ich habe verschiedene Dinge wie die folgenden ausprobiert:

COMMAND="FORMAVEN=valueForMaven mvn clean install -P $MAVEN_PROFILE"

... aber dann endet es einfach mit:

nohup: failed to run command `FORMAVEN=valueForMaven': No such file or directory

Ich habe das Gefühl, dass hier mehrere nicht verwandte Konzepte am Werk sind, von denen ich keines verstehe oder gar kenne. Was brauche ich, um das oben genannte tun zu können?

Vincent
quelle

Antworten:

18

Drei Methoden:

  • Setzen Sie die Variable (und exportieren Sie sie), bevor Sie mvn starten

  • Legen Sie die Variable beim Start von nohup fest:

    FORMAVEN=valueForMaven nohup $COMMAND > logfile
  • Verwenden Sie env, um die Variable festzulegen

    COMMAND="env FORMAVEN=valueForMaven mvn clean install -P $MAVEN_PROFILE"
Ein Programmierer
quelle
Ausgezeichnet! Ich wusste, dass es einfacher sein musste als die Anweisungen, an die ich dachte ...
Vincent