Qu'est-ce que cela “… | commande ps `cat`” faire?

10

Lors de mes recherches sur Internet, j'ai trouvé la commande suivante comme solution pour trouver le nom du processus d'une fenêtre:

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

Je ne comprends tout simplement pas ce qui se passe ici après le premier |.

Supposons que les xprop _NET_WM_PIDsorties 1000soient identifiées par le processus. Que se passe-t-il ensuite? Pourquoi avons-nous un cataprès ps? Je suis un peu confus.

Débutant
la source

Réponses:

15

xprop ... | sed ...est exécuté en premier, puis catlit sa sortie. En raison de l'utilisation de backticks, la sortie de cat est remplacée de ps `cat`sorte que la commande devienne ps 1000.

Une commande alternative qui mène au même résultat est:

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

Cela fonctionne comme suit:

  1. Exécutez xprop _NET_WM_PIDpour récupérer l'ID de processus d'une fenêtre. Après avoir cliqué sur une fenêtre, il affiche quelque chose comme:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. Séparez à la =et prenez le deuxième champ. cut -d= -f2prend la _NET_WM_PID(CARDINAL) = 12345chaîne de l'entrée standard et écrit 12345sur la sortie standard.
  3. Enfin, exécutez la pscommande en $(...)remplaçant la sortie de ..., la commande qui est exécutée est ps 12345. (note latérale: `...`peut également être utilisé à la place de $(...), bien qu'il existe quelques différences )
Lekensteyn
la source
4
Intéressant "teint", ceci | command 'cat'(je ne peux pas intégrer de backticks dans le backtick dans les commentaires?) ... la manière habituelle est: | xargs command(avec des paramètres supplémentaires à xargs, par exemple pour limiter à 1 ou n arguments, etc)
Olivier Dulac