Bash: “> |” ne yapıyor?


148

Bunu daha önce yazılı olarak gördüm;

$ some-command >| /tmp/output.txt

Dikey borular standart yönlendirmelerde kullanılır, bir komutun çıktısını bir başkasına “boruya sokmak”, >|aslında >bu senaryoda olduğu gibi tamamen işe yaramaz mı?



İçin kalanı resmin, ben çok tavsiye kabuk kontrolü ve yönlendirme operatörleri nelerdir?
Wildcard

Yanıtlar:


220

İşe yaramaz - düz >yönlendirme operatörünün özel bir şeklidir (ve belki de kafa karıştırıcı bir şekilde borularla ilgisi yoktur). bashve diğer birçok modern kabuğun noclobber, yeniden yönlendirmenin zaten var olan bir dosyanın üzerine yazmasını veya imha etmesini engelleyen bir seçeneği vardır. Örneğin, eğer noclobberdoğruysa ve dosya /tmp/output.txtzaten mevcutsa, bunun başarısız olması gerekir:

$ some-command > /tmp/output.txt

Ancak, açıkça ayarını geçersiz kılabilir noclobberile >|bile, yeniden yönlendirme çalışacaktır - yönlendirme operatörü noclobberayarlanır.

Şu noclobberanki ortamınızda ayarlanmış olup olmadığını öğrenebilirsiniz set -o.

Tarihsel not için, hem "noclobber" seçeneği hem de bypass özellikleri csh(70'lerin sonlarından) gelmektedir. kshkopyaladım (80'li yılların başında) ama >|bunun yerine kullanıldı >!. POSIX, kshsözdizimini belirtmiştir (bu nedenle bazı sistemlerde sh olarak kullanılan bash, daha yeni kül türevleri dahil tüm POSIX mermileri bunu desteklemektedir). Zsh, her iki sözdizimini de destekler. Herhangi bir Bourne kabuğu çeşidine eklendiğini sanmıyorum ama yanılıyor olabilirim.


3
@sch - geçmiş nota yeniden (ekstra bilgi için teşekkürler, btw) - FreeBSD en shvardır noclobber, Mayıs 2002 hakkında beri
D_Bye
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.