Çıplak <ne yapar?


10

bash gibi bir komut çalıştırırsanız şikayetçi görünmüyor

$ < some-file-that-exists

Hiçbir şey olmuyor gibi görünüyor.

Ayrıca kullanabilirsiniz

$ <<<"any string"

ve hatta süreç ikamesi.

Peki bu tam olarak ne yapıyor ve neden izin veriliyor. Herhangi bir şey için yararlı olabilir mi?


BTW: Büyük ZSH için "<foobar", "daha az foobar" ile aynıdır, kabuğuna yönlendirme foobarınızla aynıdır. Bunun oldukça sezgisel bir davranış olduğunu düşünüyorum. Herhangi bir argüman verilmediği için bir çıplak <size bir hata ( zsh: parse error near `\n') verecektir .
matematik

math benzer bir hata alırsınız bash, ama bu ilginç less.
Patlama Hapları

Yanıtlar:


20

<yeniden yönlendirme talimatlarından önce veya sonra oluşabilecek bir komut için yeniden yönlendirme ayarlar. yani

$ < file wc

yanı sıra çalışır

$ wc < file

Ancak bir komut vermezseniz, bash yeniden yönlendirmeyi ayarlar ve başka bir şey yapmaz. Giriş yeniden yönlendirmesi için, dosya varsa ve okunabilirse, bu gördüğünüz şeydir, hiçbir şey değildir. Dosya yoksa veya okunamıyorsa bash bir hata sinyali verecektir. Çıktı yeniden yönlendirmesi için çıktı dosyası yoksa oluşturulur. Varsa >, mevcut çıktı dosyaları kesilir ; >>kullanılırsa kesilme olmaz .


başka bir deyişle, özlü bir var ve oluşturmak
cırcır ucube

@Kyle Jones Sanırım son cümlede iki operatörü uyuştunuz.
jamesbtate

@Puddingfox Teşekkürler. Sonunda açıklığa kavuşturmak için alıştırma cümlesini düzenledim.
Kyle Jones

Kullanmak için herhangi bir neden var mı < file wcVS. wc < file?
Patlama Hapları

1
@tandu Etkileşimli kabuklar kullanıldığında kullanışlı olur. Yönlendirme kullanan bir komutunuz olduğunu ve bunu farklı bir son argümanla tekrarlamak istediğinizi varsayalım. Yeniden yönlendirme satırın başlangıcındaysa, kontrol-P yazmak ve son argümanı, sonda olduğu gibi "<foo> bar 2> & 1" dilini atlamak zorunda kalmadan düzenlemek kolaydır. Bunun ötesinde, bunun için bir şey bulamadım.
Kyle Jones

5

<varsayılan olarak stdin'den veya bir dosyadan okur. ifadeniz girişle hiçbir şey yapmaz, çünkü okuduktan sonra hiçbir şey yapmadınız.

sonunda <dosya-bu-dosya> çıktı dosyası yaparsanız, ilk dosyanın içeriğini okuduğunuzu ve ikinci dosyaya yazdığınızı göreceksiniz.

<<< burada doc biçimindedir, bu yüzden bir dosya yerine bir dizeden okur. cat <<< "herhangi bir dize" ne okuduğunuzu görmek için.


2
ileride başvurmak üzere lütfen yorum eklemek yerine ayrıntı eklemek için cevabınızı düzenleyin
Nate Koppenhaver

2
"sonunda <dosya-dosyası-var> çıktı dosyası yaparsanız, ilk dosyanın içeriğini okuduğunuzu ve ikinci dosyaya yazdığınızı göreceksiniz." Bu yanlış; komut olmadan çıktı dosyası sıfır bayta kesilir.
Kyle Jones
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.