GNU/Linux >> Linux Esercitazione >  >> Linux

Come funziona il pattern <( cmd ) in bash?

Questo si chiama sostituzione del processo.

3.5.6 Sostituzione del processo

La sostituzione del processo consente di fare riferimento all'input o all'output di un processo utilizzando un nome file.

L'elenco dei processi viene eseguito in modo asincrono e il relativo input o output viene visualizzato come nome file. Questo nome file viene passato come argomento al comando corrente come risultato dell'espansione. Se viene utilizzata la forma>(lista), la scrittura nel file fornirà l'input per la lista. Se viene utilizzata la forma <(list), il file passato come argomento deve essere letto per ottenere l'output di list. Si noti che non può comparire alcuno spazio tra e la parentesi aperta, altrimenti il ​​costrutto verrebbe interpretato come un reindirizzamento. La sostituzione del processo è supportata sui sistemi che supportano le pipe denominate (FIFO) o il metodo /dev/fd per denominare i file aperti.

Non è solo una bash come appariva originariamente in ksh ma non è nello standard posix.

Sotto il cofano, la sostituzione dei processi ha due implementazioni. Sui sistemi che supportano /dev/fd (la maggior parte dei sistemi simili a Unix) funziona chiamando il pipe( ) chiamata di sistema, che restituisce un descrittore di file $fd per una nuova pipe anonima, quindi creando la stringa /dev/fd/$fd e lo sostituisce nella riga di comando. Sui sistemi senza /dev/fd support, chiama mkfifo con un nuovo nome file temporaneo per creare una named pipe e sostituisce questo nome file nella riga di comando.


Puoi pensare a <( somecommand ) come nome file di un file temporaneo contenente l'output di somecommand . In altre parole,

utility < <( somecommand )

è una scorciatoia per

somecommand >tempfile
utility <tempfile
rm -f tempfile

E

utility <( somecommand )

è una scorciatoia per

somecommand >tempfile
utility tempfile  # notice the lack of redirection here (utility expected to read from "tempfile")
rm -f tempfile

Allo stesso modo >( somecommand ) può essere pensato come il nome file di un file temporaneo che verrà inserito in somecommand sul suo input standard. In altre parole,

utility > >( somecommand )

è una scorciatoia per

utility >tempfile
somecommand <tempfile
rm -f tempfile

E

utility >( somecommand )

potrebbe essere una scorciatoia per

mkfifo temppipe
somecommand <temppipe &
utility temppipe  # utility is expected to write to "temppipe"
rm -f temppipe

(o qualcosa di simile)


Linux
  1. Cos'è NGINX? Come funziona?

  2. Come funziona il bit appiccicoso?

  3. Lo scopo di .bashrc e come funziona?

  4. Come funzionano gli interni di Sudo?

  5. In uno script Bash Come funziona il comando Continua con i loop incorporati?

Come utilizzare il comando di lettura Bash

Come funziona la memoria di scambio in Linux?

Come funziona internamente copy_from_user dal kernel di Linux?

Come funziona rm? Cosa fa rm?

Come funziona il comando ps?

Come funziona una GUI Linux al livello più basso?