Che cosa significa un reindirizzamento "<<(...)"?


32

Ho visto che rvm (ruby version manager) è installato usando il seguente comando:

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

Quindi, a quanto ho capito, otteniamo il contenuto dello script e lo passiamo alla bash (credo < <ed <<è la stessa cosa?) Sono interessato alla < <parte, trovata la seguente descrizione in rete:

<< token I mezzi utilizzano il flusso di input corrente come STDIN per il programma fino a quando non viene visualizzato il token.

Questo in qualche modo non è chiaro per me, qualcuno può fare un esempio o spiegarlo in modo più semplice?

Risposte:


40

No, < <e <<non sono la stessa cosa.

Il primo è composto dal <carattere di reindirizzamento comune combinato con il primo carattere della <(command)sintassi. Questo è un kshcostrutto (trovato anche in bashe zsh) noto come sostituzione di processo che prende l'output di commande lo fornisce in un file il cui nome si riferisce all'altra estremità della pipe su cui commandsta scrivendo.

In altre parole, puoi pensare a < <(command)come < file, dove file contiene l'output di command.


5
Ho imparato a conoscere questo comando qualche giorno fa, è un comando molto utile. Le cose che puoi fare con questo sono limitate solo dalla tua immaginazione: ad esempio questo comando ti dà un elenco di soli file nascosti:diff <(ls) <(ls -a)
Khaja Minhajuddin

1
Questa sintassi potrebbe davvero essere molto utile, ma nel caso specifico di Stonerain, non sembra fornire alcun valore aggiunto rispetto a una semplice pipe.
jlliagre,

1
Nella sintassi sopra non aiuta. Ma se lo cambi leggermente, è molto meglio: bash <(curl ...)invece di bash < <(curl ...)non rubare STDIN, quindi sei libero di rispondere alle richieste e fornire input nello script.
tylerl,

L'uso di <() sembra essere un'ottima alternativa per inviare direttamente più variabili $ ai comandi, invece di dover prima scrivere inutilmente le variabili $ sui file. diff <(echo "$ text1") <(echo "$ text2") stackoverflow.com/questions/13437104/...
Sepero

18

È un modo contorto di fare il più semplice:

curl -s https://raw.github.com/... | bash
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.