Ich habe ein bash
Skript erstellt, das gestartete Instanzen von sich selbst zählt.Bash Skript zählt Instanzen von sich falsch
Hier ist es (in diesem Beispiel zeige ich die Instanzen, anstatt sie mit wc -l
mitgezählt):
#!/bin/bash
nb=`ps -aux | grep count_itself.sh`
echo "$nb"
sleep 20
(Natürlich, mein Skript gestattet count_itself.sh
)
Nach dessen Ausführung erwarte ich, dass es zwei Zeilen zurück, aber es gibt drei:
[email protected]:/# ./count_itself.sh
root 16225 0.0 0.0 12400 1176 pts/0 S+ 11:46 0:00 /bin/bash ./count_itself.sh
root 16226 0.0 0.0 12408 564 pts/0 S+ 11:46 0:00 /bin/bash ./count_itself.sh
root 16228 0.0 0.0 11740 932 pts/0 S+ 11:46 0:00 grep count_itself.sh
auf sie mit der &
Flagge Ausführung (dh im Hintergrund, und die ps -aux
Bit manuell ausgeführt wird, gibt es zwei, das ist, was ich will:
[email protected]:/# ./count_itself.sh &
[1] 16233
[email protected]:/# ps -aux | grep count_itself.sh
root 16233 0.0 0.0 12408 1380 pts/0 S 11:48 0:00 /bin/bash ./count_itself.sh
root 16240 0.0 0.0 11740 944 pts/0 S+ 11:48 0:00 grep --color=auto count_itself.sh
Meine Frage ist: Warum wird die ps -aux
Ausführung im Skript zurückgeben eine Zeile mehr als erwartet?
Oder mit anderen Worten, warum ist der Prozess mit der ID 16226
in meinem ersten Beispiel erstellt?
EDIT (wie die meisten Leute scheinen meine Frage falsch zu verstehen):
Ich frage mich, warum die bash
Ausführung zwei Instanzen von /bin/bash ./count_itself.sh
zurückzugibt, nicht, warum es grep count_itself.sh
zurückzugibt.
EDIT 2:
Und natürlich, ich bin auf der Suche nach einem Weg, um dieses Verhalten zu vermeiden und das Skript haben /bin/bash ./count_itself.sh
Rückkehr nur einmal.
'\' ps -aux | grep count_itself.sh wird in einer Sub-Shell, d. h. in einem Sub-Prozess, ausgeführt. Auf diese Weise wird die Shell, die das Skript ausführt, gegabelt, und das Kind führt dann die Datei "ps -aux |" aus grep count_itself.sh' Befehl. – Leon
Ich schlage vor: nb = 'ps -aux | grep [c] ount_itself.sh – Cyrus
wenn Sie 'ps -aux | ausführen grep count_itself.sh' dein grep zählt es wie eine Instanz von count_itself. Sie müssen Ihre Regex – Stargateur