GNU/Linux >> Linux Esercitazione >  >> Linux

Sostituzione del processo:un modo non comune ma avanzato per il reindirizzamento di input/output in Linux

Probabilmente hai già familiarità con l'input/output e il reindirizzamento delle pipe in Linux.

Lascia che ti parli di una funzionalità simile ma avanzata chiamata sostituzione del processo.

Troverai due tipi di sintassi per la sostituzione dei processi:

<(commands)

o

>(commands)

Vengo un po' nel dettaglio.

Sostituzione processo Bash

Scoprirai che la sostituzione del processo può essere utilizzata in modo simile al reindirizzamento STDOUT o STDIN.

Con <(commands) operatore, si legge dalla sostituzione. Ciò significa che commands è impostato per usarlo come stdout .

Ad esempio, il comando seguente utilizza l'output di ls *sh :

wc -l <(ls *sh)

Ciò equivale a:

ls *sh | wc -l

Con >(commands) operatore, scrivi alla sostituzione. Ciò significa che commands è impostato per usarlo come stdin .

In altre parole, quando hai un comando che restituisce un file ma vuoi che scriva su qualche altro comando invece del file.

Ecco un esempio che dovrebbe rendere le cose un po' più chiare:

tar -cf >(ssh remote_server tar xf -) .

Capisci cosa fa? Giusto. Hai appena trasferito tutto il contenuto della directory corrente su un server remoto. Il file di archivio viene creato al volo e viene estratto sul server.

Ad essere onesti, >(...) operatore è meno comune. Lo troverai <(...) può essere utilizzato più spesso.

Quindi, qual è il vantaggio della sostituzione del processo se funziona come il normale reindirizzamento di input e output?

Ti renderai conto della potenza e dell'utilità della sostituzione del processo bash quando hai più pipeline di comandi da combinare in un unico comando.

Vantaggio della sostituzione del processo bash

L'uso più ovvio e più frequente della sostituzione dei processi è il confronto dei risultati di due programmi. Ve lo mostro con un esempio pratico.

Supponiamo che tu abbia alcuni file di programma C e i relativi file oggetto (file .out) con lo stesso nome in una directory.

ls *
aa.c aa.out bb.c bb.out cc.c cc.out ...

Ecco il tuo obiettivo. Vuoi controllare se ogni file C ha il suo file di output corrispondente con lo stesso nome del file C o meno.

Il tuo approccio tipico sarebbe elencare i file filtrati in base all'estensione e quindi utilizzare il comando cut con delimitatore .(punto) per estrarre il nome del file senza estensione:

ls *.c | cut -d. -f1
aa
bb
cc
dd

Il tuo approccio tipico sarebbe quello di salvare l'output dei file *.ce *.out in file temporanei e quindi confrontare questi file con il comando diff. Ho ragione?

ls *.c | cut -d. -f1 > c.txt
ls *.out | cut -d. -f1 > out.txt
diff c.txt out.txt
rm c.txt out.txt

Puoi usare la directory /tmp per creare file temporanei ma hai ancora tre righe di comandi.

Puoi utilizzare magnificamente la sostituzione del processo per sostituire tutto quanto sopra con un singolo comando senza creare file temporanei:

diff <(ls *.c | cut -d. -f1) <(ls *.out | cut -d. -f1)

Non era necessario creare alcun file temporaneo qui e questa è la chiave al riguardo. Ecco il mio consiglio su quando dovresti usare la sostituzione del processo.

Ogni volta che pensi di aver bisogno di un file temporaneo per fare qualcosa, considera se è possibile utilizzare la sostituzione del processo.

La sostituzione del processo è una funzionalità bash e può funzionare o meno con altre shell.

Spero che proverai a utilizzare la sostituzione del processo in futuro. Come puoi vedere, è abbastanza utile. Accolgo con favore le vostre domande e suggerimenti.


Linux
  1. 8 comandi Linux per una gestione efficace dei processi

  2. Lavorare con l'output di input e il reindirizzamento degli errori in Linux

  3. Linux:limite all'utilizzo della memoria per un singolo processo Linux?

  4. Output di quale comando utilizzato per l'input su Cd?

  5. Il modo portatile (posix) per ottenere la sostituzione del processo?

Spiegazione del comando Linux dd per principianti (8 esempi)

30 esempi di comandi principali per il monitoraggio in Linux

Nozioni di base sui comandi di Linux:7 comandi per la gestione dei processi

Spiegazione del reindirizzamento di input e output su Linux

Spiegazione:input, output e reindirizzamento degli errori in Linux

Comandi per la gestione dei processi in Linux