'Exec {fd} </ dev / watchdog' Bash'de ne yapar?


28

Bu değişmez, {fd}yer tutucu değil. Bunu yapan ve hiçbir şeyden kaynaklanmayan bir komut dosyası var, başka bir yere {fd} atıfta bulunmuyor. Bu geçerli bash mı?

exec {fd}</dev/watchdog

Yanıtlar:


34

Bir dosya tanıtıcısı seçmek ve kullanılabilir olmasını ummak yerine:

exec 4< /dev/watchdog  # Was 4 in use? Who knows?

bu notasyon, kabuktan şu anda kullanılmayan bir dosya tanımlayıcısını seçmesini, bu tanımlayıcıyı okumak için dosyayı açmasını ve sayıyı verilen değişkene ( fd) atamasını ister .

$ exec {fd}< /dev/watchdog
$ echo $fd
10

Haklı olduğunuza eminim, çünkü (1) bir yerde okuduğumu hatırlıyorum ve (2) Sadece denedim (ve işe yarıyor). Ama hiçbir yerde belgelenmiş bulamadım. (Tabii ki, cevabınızı göndermeden önce arama yapmak için on dakikadan daha az zamanım kaldı.) Belgelendiği yere referans verebilir misiniz?
Scott,

2
Man sayfasına bakınız, bölümün 2. paragrafı REDIRECTIONS. Açıkça bir örnek vermedikleri için size gerçekten sıçramaz.
chepner

Haklısın, bash adamında özledim ama dediğin yer orada. Herhangi bir kelime değil, sadece fd ayraç çalışacağını kaydetti ve edilmelidir bir fd> = 10. atadığı
Gregg Leventhal

3
@Scott, sadece bash'da değil, sadece bash 4.1'de veya daha yenisinde (bu yüzden hala MacOS'ta kullanılan 3.2 sürümlerinde mevcut değil).
Charles Duffy,

2
@CharlesDuffy /dev/watchdogMac OS X'te de yok; Linux'a özgü bir cihaz.
duskwuff

11

Form:

{var}<filename

filenamedeğişkenin içindeki dosya tanımlayıcı numarasını okumak ve saklamak için kabuğu açık dosya haline getirdi var. {var}Yönlendirme operatörleri arasında izin verilen boşluk yoktur ve dosya tanımlayıcı numarası eşit veya büyük olacaktır 10.

Bu özellik orijinal olduğunu ksh, (2006 yılında versiyon ksh93r itibaren) bashçok daha sonra bunu kopyalanan bash-4.1-alpha2010'dan itibaren zshde değişiklik daha önce yapılmış bashdan zsh 4.3.42007 yılında.


2

Bu, Yönlendirmeler hakkındaki Bash el kitabı bölümünde açıklanmıştır .

Bir dosya tanıtıcı numarasından önce gelebilecek her yönlendirme, bunun yerine { varname } biçiminde bir kelime ile yapılabilir . Bu durumda, >&-ve dışındaki her yeniden yönlendirme operatörü <&-için kabuk, 10'dan büyük bir dosya tanıtıcısı tahsis eder ve { varname } öğesine atar . Eğer >&-veya <&-önce { varname } ile belirtilmişse, varname'nin değeri kapanacak dosya tanımlayıcısını tanımlar.

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.