reindirizzamento dell'output del comando utilizzando '- <<(...)'


10

Avevo bisogno di estrarre uno shasum. Funziona, ma qualcuno può spiegare perché?

sed 's/^.*= //' -< <(openssl dgst -sha256 filename)

Ho familiarità con il $( )costrutto, ma non riesco a trovare documenti <( ), accoppiati a -<, che presumo stia reindirizzando a sedSTDIN.

So che ci sono modi più semplici, ma questo costrutto mi sfugge.

Risposte:


10

Il

<(openssl dgst -sha256 filename)

il costrutto è una sostituzione di processo . Crea un file (o FIFO) dietro le quinte e restituisce il nome alla sequenza di comandi.

< 

è un reindirizzamento di file regolare, che reindirizza il contenuto del file dietro le quinte su stdine

-

è un segnaposto riconosciuto da sedper indicare che il suo input proviene stdin.

Poiché sedè perfettamente in grado di leggere da file, -<sembra inutile in questo contesto;

sed 's/^.*= //' <(openssl dgst -sha256 filename)

dovrebbe funzionare altrettanto bene.


3
o soloopenssl ... | sed '...'
Miglia,

8

Il <( COMMAND )costrutto Bash è chiamato sostituzione del processo .

Valuta l' COMMANDinterno e reindirizza il suo output su un FIFO, una pipe denominata a cui viene /dev/fdassegnato un descrittore di file virtuale all'interno . Si comporta come un file temporaneo che contiene l'output del comando valutato.


Il <costrutto Bash è chiamato reindirizzamento dell'input .

Prende un descrittore di file sul lato destro e reindirizza il suo contenuto allo STDIN (input standard) del comando sul lato sinistro.


Non -è un costrutto Bash ma un argomento persed questo specifica il suo file di input. Il valore speciale -significa leggere da STDIN (che è anche sedpredefinito, quindi potrebbe essere omesso).


sed 's/^.*= //' - < <(openssl dgst -sha256 filename)

Questa riga viene innanzitutto eseguita openssl dgst -sha256 filenamee memorizza nella cache l'output in un FIFO. Il descrittore di file che rappresenta questa pipe denominata viene trattato come file di input che viene reindirizzato allo STDIN di sed 's/^.*= //' -. Questo sedcomando legge da STDIN e rimuove ogni carattere prima di un simbolo "=" seguito da uno spazio.

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.