Die erste Zeile:
echo $(ps | grep $PPID) | cut -d" " -f4
sagt:
- Führen Sie
ps | grep $PPID
aus in einer Sub-Shell -
Geben Sie die Ausgabe zurück, die in etwa so aussehen wird:
3559 pts/1 00:00:00 bash
und 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" " -f4
aus 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$PPID
enthält eine Zahl, also wird es nieps
sein . Daher gibt grep nichts zurück - Führen Sie
cut -d" " -f4
aus 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. :-)