Sorun, bağlantılı makalede kullanılan sözdiziminde yatmaktadır. Neyin yanlış gittiğini anlamak için bir göz atalım man wall
:
Kullanım man wall
:
wall [file]
Wall displays the contents of file or, by default, its standard input
Bu yüzden mesajı için iki kaynaktan biriniwall
kabul eder .
Dosya adı bağımsız değişkeni
Verilen herhangi bir komut satırı argümanı wall
bir dosya adı olmalıdır. Argümanın mesaj mı yoksa dosya adı mı olduğunu anlamanın güvenilir bir yolu olmadığından, wall
bunun ikincisi olduğunu varsayar, standart girdiye gelen herhangi bir şeyi yok sayar ve bu dosyadan mesajı okumaya çalışır.
Verilen durumda, dosyadan okumaya çalışır who's out there
ve bulamaz. Bir dosyadan okumak genellikle süper kullanıcı ile sınırlıdır. Eğer idam olsaydı wall "who's out there"
Normal bir kullanıcı gibi, muhtemelen çıkış, olurduwall: will not read who's out there - use stdin.
Standart giriş
Komut satırında bir dosya adı bağımsız değişkeni alamazsa, standart girdiden okumaya başlar. Bir komutun standart girişine bilgi beslemenin birkaç yolu vardır. Bunlardan biri UNIX borusu kullanmaktır . Bir boru hattı, sol taraftaki komutunun standart çıkışını sağ taraftaki komutun standart girişine bağlar:
$ echo "who's out there" | wall
Başka bir yol da burada bir belge kullanmaktır . A here document
, bir dizeyi (kendi satırında belirtilen bir uç işaretçiye kadar) doğrudan bir komutun standart girişine geçiren ve farklı bir komutun o çıktıyı üretmesinin ara adımı olmadan geçen bir kabuk yapısıdır:
$ wall << .
who's out there?
.
Bu, varsayılan olarak terminalin wall
standart girdisine bağlanacağı ve wall
dosya sonu karakteri ( Ctrl+D) alana kadar ondan okumaya başlayacağı için, "burada belgelerin yararsız kullanımı" olacaktır.
$ wall
who's out there?
^D
As Zengin Homolka açıklamalarda belirtildiği, bazı kabukları destekleyen here strings
komut veya son İşaretçisiz değişmez bir dize geçirerek olanak veren:
$ wall <<< "who's out there?"
Hepsi wall
standart girdiye bir şeyler besler . Ederken fark bir boru hattı buna başka komutun çıktısını bağlayan olmasıdır here documents
ve here strings
doğrudan dize geçmektedir. Buradaki son ikisinin avantajı estetik bir özelliktir, çünkü echo
boru örneğindeki komut bir kabuk yerleşik komutudur, bu nedenle her durumda kabuk sağlayan wall
giriş olacaktır.
echo xxx | yyy
zsh'ın sözdiziminden kaçınmak için başka bir biçimi var , bu da cludgy'yi buldumwall <<<'your message'