2016-04-04 5 views
2

So habe ich den folgenden Ausschnitt:Prevent TMUX von Start in IntelliJ Terminal

if [[ ps -p$PPID | grep 'java' == '' ]]; then 
    ZSH_TMUX_AUTOSTART=true; 
fi 

, die den folgenden Fehler zurückgibt:

/home/otis/.zshrc:8: parse error: condition expected: ps 

Die Idee ist, dass, wenn ps -p$PPID | grep 'java' kehrt dann nichts ZSH_TMUX_AUTOSTART=true gesetzt.

Der Grund, warum ich das tun möchte, ist, dass ich tmux in meinem gnome-terminal automatisch starten möchte, aber nicht in meinem intellij-Terminal, wenn ich diesen Befehl in gnome ausführe, gibt es nichts zurück und wenn ich von intellij laufe, gibt es java zurück.

Also die Logik ist im Grunde solid, wenn es nichts zurückgegeben immer tmux, aber ich bin nicht so gut in der Shell, so dass jede Hilfe sehr geschätzt würde.

Prost.

Antwort

3

Der Grund, warum Sie eine Fehlermeldung erhalten, liegt an dem bedingten Ausdruck ([[ … ]]), der eine Bedingung nach ps erwartet, die für eine Zeichenfolge und nicht für einen Befehl benötigt wird. Sie müssen den Befehl in $(…) umbrechen, um seine Ausgabe innerhalb des Bedingungsausdrucks zu verwenden. Alternativ können Sie auch den Exit-Code grep verwenden, um festzustellen, ob "java" gefunden wurde, wodurch ein bedingter Ausdruck nicht mehr benötigt wird.

if ! ps -p $PPID | grep -q java; then 
    ZSH_TMUX_AUTOSTART=true; 
fi 

Beachten Sie, dass die Rückgabewerte der Überprüfung umgekehrt sind, was Sie ursprünglich beabsichtigten. Daher die !, true zurückzugeben, wenn der Exit-Code wäre false und umgekehrt. -q unterdrückt nur die Ausgabe von grep.

+1

Dies funktionierte wirklich gut Ich endete mit 'if! ps -p $ PPID | grep -q java; Dann habe ich den '!' (not) Modifier so hinzugefügt, dass ich die 'else' Aussage vermeiden konnte. –

+0

@OtisWright Sie sind natürlich richtig, '!' Sorgt für eine klarere Aussage. Ich habe die Antwort entsprechend bearbeitet. – Adaephon

Verwandte Themen