¿Qué significa esto "... | ¿Comando ps `cat`”?

10

En mi investigación en Internet, encontré el siguiente comando como solución para encontrar el nombre del proceso de una ventana:

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

Simplemente no entiendo lo que sucede aquí después del primero |.

Supongamos que las xprop _NET_WM_PIDsalidas 1000como ID de proceso. ¿Qué pasa después? ¿Por qué tenemos un catdespués ps? Estoy un poco confundido.

Novato
fuente

Respuestas:

15

xprop ... | sed ...se ejecuta primero, luego catlee su salida. Debido al uso de backticks, la salida de cat se sustituye de ps `cat`tal manera que el comando se convierte ps 1000.

Un comando alternativo que conduce al mismo resultado es:

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

Esto funciona de la siguiente manera:

  1. Ejecute xprop _NET_WM_PIDpara recuperar el ID de proceso de una ventana. Después de hacer clic en una ventana, genera algo como:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. Divida en el =y tome el segundo campo. cut -d= -f2toma la _NET_WM_PID(CARDINAL) = 12345cadena de entrada estándar y escribe 12345en la salida estándar.
  3. Finalmente ejecuta el pscomando con $(...)sustituido por la salida de ..., el comando que se ejecuta es ps 12345. (nota al margen: `...`también se puede usar en lugar de $(...), aunque hay algunas diferencias )
Lekensteyn
fuente
44
Interesante "complexión", esto | command 'cat'(no puedo insertar backticks en el backtick en los comentarios?) ... la forma habitual es: | xargs command(con parámetros adicionales a xargs, por ejemplo, limitar a 1 o n argumentos, etc.)
Olivier Dulac