Wie kann ich laufende Bash-Skripte nach dem Namen des Skripts auflisten?

7

psGibt bashals Namen des Prozesses zurück ... Ich möchte stattdessen den Namen des Shell-Skripts.

Wenn mein Skript beispielsweise lautet TestEric.sh, möchte ich die Anzahl der Instanzen dieses Skripts auflisten, die derzeit ausgeführt werden.

Eric Mamet
quelle

Antworten:

9

Das Problem hierbei ist, dass psstandardmäßig nur der Basisbefehl in seiner Ausgabe angezeigt wird, nicht die gesamte Befehlszeile einschließlich der Argumente.

Wenn Sie Ihr Skript mit starten bash TestEric.sh, lautet der Basisbefehl bash. Wenn Sie es als ausführen TestEric.sh(möglicherweise einschließlich seines Pfads), lautet der Basisbefehl das und nicht bash.


Sie können Prozesse einfach verwenden, pgrepanstatt sie psnach Namen zu filtern. Es verfügt über ein -fFlag, mit dem das angegebene Muster mit der gesamten Befehlszeile und nicht nur mit dem Basisbefehl abgeglichen wird.

Mit dem -aFlag wird die gesamte Befehlszeile in der Ausgabe zu Debugging-Zwecken anstelle nur der PID angezeigt. Sobald Sie überprüft haben, dass es funktioniert, können / sollten Sie es wieder in Ihrem Skript entfernen.

Versuche dies:

pgrep -f -a TestEric.sh

Sie können die Prozesse später zählen, wcindem Sie die pgrepAusgabezeilen zählen:

pgrep -f TestEric.sh | wc -l
Byte Commander
quelle
2

Sie könnten ps ustattdessen versuchen zu laufen . Auf den Manpages entspricht display user-oriented formatdie Option u, mit der sowohl die zum Ausführen des Skripts verwendete Shell als auch der Name des Skripts selbst angezeigt werden.

Elhitch
quelle
1

Anscheinend hilft es, wenn ich !#/bin/basham Anfang der Datei hinzufüge ... Dann erscheint der Name des Skripts im psBericht.

Eric Mamet
quelle