Ich versuche zu überprüfen, ob ein Prozess (vorausgesetzt, er wird aufgerufen some_process
) auf einem Server ausgeführt wird. Wenn ja, dann Echo 1, andernfalls Echo 0.
Dies ist der Befehl, den ich verwende, der jedoch nur teilweise funktioniert (weitere Informationen unten). Beachten Sie, dass ich das Skript in einer Zeile schreiben muss.
ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi
Hinweis: Das [s]
In some_proces[s]
soll verhindern, dass grep
es sich selbst zurückgibt.
Wenn some_process
es läuft, "1"
wird es wiedergegeben, was in Ordnung ist. Wenn some_process
es jedoch nicht ausgeführt wird, wird nichts wiedergegeben.
ps -Ccmd
damit Prozesse suchen, deren Befehlsname "cmd" ist, wodurch das vollständig beseitigt werden kanngrep
.ps
setzt den Exit-Code auf einen Wert ungleich Null, wenn kein passender Prozess gefunden wird.Antworten:
Es besteht keine Notwendigkeit, dies explizit zu überprüfen
$?
. Mach einfach:Beachten Sie, dass dies darauf beruht, dass das Echo nicht ausfällt, was sicherlich nicht garantiert ist. Eine zuverlässigere Möglichkeit, dies zu schreiben, ist:
quelle
echo 1
fehlschlagen,echo 0
wird ausgeführt. In diesem Fall wird Echo 1 niemals fehlschlagen. Beachten Sie jedoch, dass A && B || C ist nicht wenn-dann-sonst. C kann ausgeführt werden, wenn A wahr ist (vom Shellcheck ).if ps aux | grep some_proces[s]; then echo 1; else echo 0; fi
. Vor Ort scheint es für mich zu funktionieren. Liegt es daran, dass OP die Umleitung in dem Befehl hatte, den er versucht hat?grep -q
oder nach / dev / null umgeleitet).pgrep
.&&
bedeutet "und wenn erfolgreich"; indem Sie Ihre Platzierungif
Erklärung auf der rechten Seite davon, stellen Sie sicher , dass es nur dann , wenn läuftgrep
zurückkehrt0
. Verwenden Sie, um das Problem zu beheben;
stattdessen Problem :(oder verwenden Sie einfach einen Zeilenumbruch).
quelle
Verwenden Sie
grep -vc
diese Option,grep
um dieps
Ausgabe zu ignorieren und die Zeilen gleichzeitig zu zählen.quelle
Sie können die Operatoren
&&
und||
wie folgt vollständig nutzen :Um grep selbst auszuschließen, können Sie auch Folgendes tun:
quelle
mehr Oneliner hier
quelle