Rohrleitungen Ausgabe zu schneiden
Ich versuche, den Namen der shell ein Skript ausführt.
Warum
echo $(ps | grep $PPID) | cut -d" " -f4
arbeiten, während
echo ps | grep $PPID | cut -d" " -f4
nicht?
InformationsquelleAutor ZPS | 2012-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Grund ist, dass
nur druckt den string
ps
; es wird nicht ausgeführt, das Programmps
. Die korrigierte version des Befehls wäre:Bearbeitet, um hinzufügen: paxdiablo weist darauf hin, dass
ps | grep $PPID
umfasst eine Menge von whitespace-Zeichen zu bekommen, brach durchecho $(ps | grep $PPID)
(da das Ergebnis$(...)
, wenn es nicht in Anführungszeichen zu setzen, ist geteilt durch Leerzeichen in einzelne Argumente, und dannecho
Ausgänge alle Argumente durch Leerzeichen getrennt). Um dies zu beheben, können Sietr
zu "squeeze", wiederholte Räume:oder Sie können nur kleben mit, was Sie hatten, um mit zu beginnen. 🙂
Nicht ganz. Die erste version hat die zusätzliche Wirkung der kollabierenden Räume.
Awwwww, du hast Recht! Dank
Guter Punkt! Ich werde sehen, über das Bearbeiten meiner Antwort . . .
Ich habe bearbeitet meine Antwort.
InformationsquelleAutor ruakh
Die erste Zeile:
sagt:
ps | grep $PPID
in einer sub-shellRückgabe der Ausgabe, - das wird so etwas wie dieses:
und verwenden Sie dann die Ausgabe, wie der erste parameter von echo -, die in der Praxis bedeutet, dass nur die echo Ausgabe
cut -d" " -f4
an - das gibt Ihnen der name des Befehls, in diesem FallDen zweiten Befehl:
sagt:
ps
$PPID
- das wird nie etwas zurückkehren, als$PPID
eine Zahl enthält, so wird es nie seinps
. So, grep gibt nichtscut -d" " -f4
mit Eingabe des vorherigen Befehls - und das ist nichts, so bekommen Sie nichtsInformationsquelleAutor icyrock.com
Ich denke, wenn Sie laufen nur
echo ps
auf seine eigene, werden Sie sehen, warum Ihre Leitung funktioniert nicht:Statt, überprüfen Sie
$0
. Beachten Sie, dass es sein könnte-bash
oderbash
, je nach dem ob es ein login-shell. (Gut, jeder shell-nicht nurbash
- aber die Bindestrich Hinzugefügt wird, wenn die shell eine login-shell.)InformationsquelleAutor sarnold
Für viele Anwendungen ist es besser, nur uns
tr
. Zum Beispiel:Eingang:
echo "field1,field2,field3" | tr , \\n
Ausgabe:
field1
field2
field3
InformationsquelleAutor CognizantApe