Die erste Zeile:
echo $(ps | grep $PPID) | cut -d" " -f4
sagt:
- Führen Sie
ps | grep $PPIDaus in einer Sub-Shell -
Geben Sie die Ausgabe zurück, die in etwa so aussehen wird:
3559 pts/1 00:00:00 bashund verwenden Sie dann diese Ausgabe als ersten Parameter von echo - was in der Praxis bedeutet, dass Sie einfach die Ausgabe wiedergeben
- Führen Sie dann
cut -d" " -f4aus darauf - was Ihnen in diesem Fall den Befehlsnamen gibt
Der zweite Befehl:
echo ps | grep $PPID | cut -d" " -f4
sagt:
- Echostring
ps - Suchen Sie diese Zeichenfolge nach
$PPID- Dies wird niemals etwas zurückgeben, als$PPIDenthält eine Zahl, also wird es niepssein . Daher gibt grep nichts zurück - Führen Sie
cut -d" " -f4aus mit Eingabe des vorherigen Befehls - was nichts ist, also bekommst du nichts
Der Grund ist, dass
echo ps
gibt nur den String ps aus; es führt das Programm ps nicht aus . Die korrigierte Version Ihres Befehls wäre:
ps | grep $PPID | cut -d" " -f4
Hinzufügen bearbeitet: paxdiablo weist darauf hin, dass ps | grep $PPID enthält viele Leerzeichen, die durch echo $(ps | grep $PPID) reduziert werden (da das Ergebnis von $(...) , wenn es nicht in doppelten Anführungszeichen steht, wird durch Leerzeichen in separate Argumente aufgeteilt und dann echo gibt alle seine Argumente durch Leerzeichen getrennt aus). Um dies zu beheben, können Sie tr verwenden wiederholte Leerzeichen "quetschen":
ps | grep $PPID | tr -s ' ' | cut -d' ' -f5
oder Sie können einfach bei dem bleiben, womit Sie beginnen mussten. :-)