“<<(…)” Yönlendirmesinin anlamı nedir?


32

Rvm'nin (ruby version manager) şu komutu kullanarak kurulduğunu gördüm:

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

Anladığım kadarıyla senaryo içeriğini alıp bash'a aktarıyoruz (inanıyorum < <ve <<aynı şey mi?) < <Net ile ilgili şu açıklamada bulundu:

<< belirteç Belirteç görülene kadar program için geçerli giriş akışını STDIN olarak kullanmak anlamına gelir.

Bu bir şekilde benim için net değil, birisi bir örnek yapabilir veya daha basit bir şekilde açıklayabilir mi?

Yanıtlar:


40

Hayır, < <ve <<aynı şey değildir.

İlki <, <(command)sözdiziminin ilk karakteri ile birlikte ortak yönlendirme karakterinden oluşur . Bu, çıktısını alan ve adını borunun diğer ucuna yazdığı bir dosyada sağlayan , işlem ikamesi olarak da bilinen ksh( bashve içinde bulunan zsh) bir yapıdır .commandcommand

Başka bir < <(command)deyişle < file, dosyanın çıktısını içerdiği yer olarak düşünebilirsiniz command.


5
Birkaç gün önce bu komutu öğrendim, bu çok kullanışlı bir komut. Bununla yapabilecekleriniz sadece sizin hayal diff <(ls) <(ls -a)
gücünüzle

1
Bu sözdizimi gerçekten de oldukça faydalı olabilir, ancak Stonerain'in özel durumunda, basit bir boruya kıyasla herhangi bir katma değer sağlamadığı görülüyor.
jlliagre

1
Yukarıdaki sözdiziminde yardımcı olmuyor. Ancak hafifçe değiştirirseniz çok daha iyidir: STDIN çalmak bash <(curl ...)yerine bash < <(curl ...)istemleri yanıtlamakta ve senaryoda girdi sağlamakta özgürsünüz.
tylerl

<() Kullanımı, önce $ değişkenlerini gereksiz yere dosyalara yazmak yerine, doğrudan komutlara birden fazla $ değişkeni göndermek için harika bir alternatif gibi görünüyor. diff <(echo "$ text1") <(echo "$
text2

18

Bu basit yapmanın kıvrımlı bir yoludur:

curl -s https://raw.github.com/... | bash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.