Apa artinya pengalihan “<<(...)"?


32

Saya telah melihat bahwa rvm (manajer versi ruby) diinstal menggunakan perintah berikut:

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

Jadi, seperti yang saya pahami, kami mendapatkan konten skrip dan meneruskannya ke bash (saya percaya < <dan <<merupakan hal yang sama?) Saya tertarik pada < <bagian ini, menemukan uraian berikut di internet:

<< Token Berarti menggunakan aliran input saat ini sebagai STDIN untuk program sampai token terlihat.

Ini entah bagaimana tidak jelas bagi saya, dapatkah seseorang membuat contoh atau menjelaskannya dengan cara yang lebih sederhana?

Jawaban:


40

Tidak, < <dan <<bukan hal yang sama.

Yang pertama terdiri dari <karakter pengalihan umum yang dikombinasikan dengan karakter pertama dari <(command)sintaks. Ini adalah kshkonstruk (juga ditemukan di bashdan zsh) yang dikenal sebagai substitusi proses yang mengambil output commanddan menyediakannya dalam file yang namanya merujuk ke ujung pipa commandyang ditulis.

Dengan kata lain Anda dapat menganggapnya < <(command)sebagai < file, di mana file berisi output command.


5
Saya belajar tentang perintah ini beberapa hari yang lalu, ini adalah perintah yang sangat berguna. Hal-hal yang dapat Anda lakukan dengan ini hanya dibatasi oleh imajinasi Anda: mis. Perintah ini memberi Anda daftar hanya file yang tersembunyi:diff <(ls) <(ls -a)
Khaja Minhajuddin

1
Sintaks ini mungkin memang sangat berguna tetapi dalam kasus khusus Stonerain, tampaknya tidak memberikan nilai tambah dibandingkan dengan pipa sederhana.
jlliagre

1
Dalam sintaks di atas tidak membantu. Tetapi jika Anda mengubahnya sedikit, itu jauh lebih baik: bash <(curl ...)alih-alih bash < <(curl ...)tidak mencuri STDIN, jadi Anda bebas untuk menjawab pertanyaan dan memberikan masukan dalam skrip.
tylerl

Menggunakan <() tampaknya menjadi alternatif yang bagus untuk mengirim banyak variabel $ ke perintah secara langsung, daripada harus terlebih dahulu menulis variabel $ ke file. diff <(echo "$ text1") <(echo "$ text2") stackoverflow.com/questions/13437104/…
Sepero

18

Ini adalah cara berbelit-belit dalam melakukan yang lebih sederhana:

curl -s https://raw.github.com/... | bash
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.