Was bedeutet das? ps `cat`” Befehl tun?

10

Bei meiner Internetrecherche habe ich den folgenden Befehl als Lösung gefunden, um den Prozessnamen eines Fensters zu ermitteln:

xprop _NET_WM_PID | sed 's/_NET_WM_PID(CARDINAL) = //' | ps `cat`

Ich verstehe einfach nicht, was hier nach dem ersten passiert |.

Nehmen wir an, dass die xprop _NET_WM_PIDAusgabe 1000als Prozess-ID erfolgt. Was passiert als nächstes? Warum haben wir ein catAfter ps? Ich bin etwas verwirrt.

Neuling
quelle

Antworten:

15

xprop ... | sed ...wird zuerst ausgeführt und catliest dann seine Ausgabe. Aufgrund der Verwendung von Backticks wird die Ausgabe von cat ps `cat`so ersetzt, dass der Befehl wird ps 1000.

Ein alternativer Befehl, der zum gleichen Ergebnis führt, lautet:

ps $(xprop _NET_WM_PID | cut -d= -f2)

Dies funktioniert wie folgt:

  1. Ausführen xprop _NET_WM_PID, um die Prozess-ID eines Fensters abzurufen. Nach dem Klicken auf ein Fenster wird Folgendes ausgegeben:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. Teilen Sie am =und nehmen Sie das zweite Feld. cut -d= -f2Nimmt den _NET_WM_PID(CARDINAL) = 12345String von der Standardeingabe und schreibt 12345in die Standardausgabe.
  3. Führen Sie abschließend den psBefehl aus, bei dem $(...)die Ausgabe von ersetzt ...wird. Der Befehl, der ausgeführt wird, lautet ps 12345. (Randnotiz: `...`kann auch anstelle von verwendet werden $(...), obwohl es einige Unterschiede gibt )
Lekensteyn
quelle
4
Interessanter "Teint", dies | command 'cat'(ich kann keine Backticks in Kommentare in den Backtick einbetten?) ... der übliche Weg ist: | xargs command(mit zusätzlichen Parametern zu xargs, zum Beispiel um auf 1 oder n Argumente usw. zu beschränken)
Olivier Dulac