Cosa significa "… | ps comando `cat`” fare?


10

Nella mia ricerca su Internet, ho trovato il seguente comando come soluzione per trovare il nome del processo di una finestra:

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

Non capisco cosa succede qui dopo il primo |.

Supponiamo che xprop _NET_WM_PIDoutput 1000come ID processo. Cosa succede dopo? Perché abbiamo un catdopo ps? Sono un po 'confuso.

Risposte:


15

xprop ... | sed ...viene eseguito per primo, quindi catlegge il suo output. A causa dell'uso di backtick, l'output di cat viene sostituito in modo ps `cat`tale che il comando diventi ps 1000.

Un comando alternativo che porta allo stesso risultato è:

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

Funziona come segue:

  1. Eseguire xprop _NET_WM_PIDper recuperare l'ID processo di una finestra. Dopo aver fatto clic su una finestra, viene emesso qualcosa del tipo:

    _NET_WM_PID(CARDINAL) = 12345
    
  2. Dividi al =e prendi il secondo campo. cut -d= -f2prende la _NET_WM_PID(CARDINAL) = 12345stringa dall'input standard e scrive 12345nell'output standard.
  3. Infine esegui il pscomando con $(...)sostituito all'output di ..., il comando che viene eseguito è ps 12345. (nota a margine: `...`può essere usato anche al posto di $(...), anche se ci sono alcune differenze )

4
Interessante "carnagione", questo | command 'cat'(non riesco a incorporare i backtick nei backtick nei commenti?) ... il solito modo è: | xargs command(con parametri addizionali a xargs, ad esempio per limitare a 1 o n argomenti, ecc.)
Olivier Dulac
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.