Senden Sie den Befehl an den Hintergrund, während Sie stdin/stdout mit der Bash-Funktion erfassen

Senden Sie den Befehl an den Hintergrund, während Sie stdin/stdout mit der Bash-Funktion erfassen

Ich habe einen Befehl zum Starten livy-server, der direkt in der Befehlszeile funktioniert:

$cd /git/livy; nohup bin/livy-server > /tmp/livy.log 2>&1 &
[1] 4370
19:11:11/livy $
19:11:12/livy $ll /tmp/livy.log
-rw-r--r--  1 boes  wheel  436 Jan 26 19:11 /tmp/livy.log

Aber es tutnichtvon einer Funktion. In meinem ~/.profilegibt es eine Funktion zum Starten livy-server:

startlivy() { cd /git/livy; nohup bin/livy-server > /tmp/livy.log 2>&1 & ; }

/Users/boescst/.profile: line 432: syntax error near unexpected token `;'
-bash: /Users/boes/.profile: line 432: `startlivy() { cd /git/livy; nohup bin/livy-server > /tmp/livy.log 2>&1 & ; }'

Müssen die &Et-Zeichen irgendwie maskiert werden?

Übrigens, obwohl dies das Ergebnis wahrscheinlich nicht beeinflusst – ich bin dabei El Capitan.

Antwort1

Das Problem ist das letzte Semikolon, das entfernt werden muss.

startlivy() { cd /git/livy; nohup bin/livy-server > /tmp/livy.log 2>&1 & }

Antwort2

Es scheint, dass das Problem nur auftritt, wenn versucht wird, einen Einzeiler zu verwenden: d. h. das Folgendetutarbeiten:

startlivy() { 
     cd /git/livy
      nohup bin/livy-server > /tmp/livy.log 2>&1 &  
}

Hinweis: Wenn jemand weiß, wie man dies in einem Einzeiler handhabt, würde ich es gerne wissen – und werde eine Prämie vergeben.

verwandte Informationen