web-dev-qa-db-fra.com

À quoi sert cette commande "... | ps` cat` "?

Lors de mes recherches sur Internet, j'ai trouvé la commande suivante comme solution pour trouver le nom de 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 xprop _NET_WM_PID génère 1000 en tant qu'ID de processus. Qu'est-ce qui se passe ensuite? Pourquoi avons-nous une cat après ps? Je suis un peu confus.

10
Newbie

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

Une autre commande aboutissant au même résultat est la suivante:

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

Cela fonctionne comme suit:

  1. Exécutez xprop _NET_WM_PID pour 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. Fractionner au = et prendre le deuxième champ. cut -d= -f2 prend la chaîne _NET_WM_PID(CARDINAL) = 12345 de l'entrée standard et écrit 12345 sur la sortie standard.
  3. Enfin, exécutez la commande ps avec $(...) substitué à la sortie de ..., la commande exécutée est ps 12345. (note latérale: `...` peut également être utilisé à la place de $(...), bien que il existe quelques différences )
15
Lekensteyn