Bash '<(dosya içeriği)' sözdizimi adı nedir?


25

Güvenlik StackExchange'teki bu cevap, bir satır içi dosya oluşturmak için ilginç bir bash sözdizimi kullanır:

openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650

Bu bit özellikle ilginç:

<(openssl ecparam -name secp384r1)

Sadece çalışan:

echo <(openssl ecparam -name secp384r1)

geri aldım /dev/fd/63

Yani bu dosyanın içeriğiyle geçici bir dosya tanıtıcı yapıyor gibi görünüyor.

Buna ne denir?


3
Sonuçta ortaya çıkan "dosya" nın aslında adlandırılmış bir kanal olduğunu ve bazı programların onları dosya argümanları olarak desteklemediğini unutmayın. Örnek: git diff --no-index file1 <(cat file2)başarısız olur: error: /dev/fd/63: unsupported file type. Ayrıca error: readlink("/dev/fd/63"): No such file or directoryuygulamanın boruya bir sembolik bağlantı oluşturup oluşturmadığını da görebilirsiniz (nedense benim için kırık bir bağlantı gibi görünüyor).
Kelvin

Yanıtlar:


35

Buna işlem değiştirme adı verilir ve bash, zsh ve ksh'ın bir özelliğidir (ve muhtemelen diğerleri bilmiyorum). POSIX değildir ve taşınabilir kodda kullanmamalısınız, ancak çok kullanışlıdır.

Bash kılavuzunun ilgili kısmı:

3.5.6 Süreç Değiştirme

İşlem değiştirme, adlandırılmış boruları (FIFO) destekleyen sistemlerde veya açık dosyaların adlandırılmasında / dev / fd yönteminde desteklenir. Şeklini alır

  <(list) 

veya

  >(list) 

İşlem listesi bir FIFO'ya bağlı giriş veya çıkışla veya / dev / fd içindeki bir dosyayla çalıştırılır. Bu dosyanın adı, genişlemenin sonucu olarak o anki komuta argüman olarak iletilir. > (Liste) formu kullanılırsa, dosyaya yazmak liste için girdi sağlayacaktır. <(List) formu kullanılırsa, argüman olarak iletilen dosya listenin çıktısını almak için okunmalıdır. <Veya> ve sol parantez arasında boşluk görünmeyebilir, aksi takdirde yapı yeniden yönlendirme olarak yorumlanır.

Mümkün olduğunda, işlem değiştirme, parametre ve değişken genişleme, komut değiştirme ve aritmetik genişleme ile aynı anda gerçekleştirilir.

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.