問題は、リンクされた記事で使用されている構文にあります。何がうまくいかないかを理解するために、見てみましょうman wall:
使用方法man wall:
wall [file]
Wall displays the contents of file or, by default, its standard input
そのため、メッセージの2つのソースのいずれかをwall受け入れます。
ファイル名引数
与えられるコマンドライン引数wallはファイル名でなければなりません。引数がメッセージまたはファイル名のどちらであるかを判断するための信頼できる方法はないためwall、後者であると想定し、標準入力からの入力を無視し、そのファイルからメッセージを読み取ろうとします。
指定された場合、ファイルからの読み取りを試みますwho's out thereが、見つかりません。通常、ファイルからの読み取りはスーパーユーザーに制限されていることに注意してください。wall "who's out there"特権のないユーザーとして実行した場合、その出力はおそらくそうでしたが、wall: will not read who's out there - use stdin.
標準入力
コマンドラインでファイル名の引数を取得しない場合、標準入力から読み取りを開始します。コマンドの標準入力に情報を提供するには、いくつかの方法があります。1つは、UNIXパイプを使用することです。パイプラインは、その左側のコマンドの標準出力をその右側のコマンドの標準入力に接続します。
$ echo "who's out there" | wall
別の方法は、hereドキュメントを使用することです。A here documentは、コマンドの標準入力に文字列(それ自体の行の指定されたエンドマーカーまで)を直接渡すシェル構成体であり、別個のコマンドがその出力を生成する中間ステップはありません。
$ wall << .
who's out there?
.
これは、デフォルトでは端末自体がwallの標準入力に接続されwall、ファイル終了文字(Ctrl+D)を受け取るまで読み取りを開始するため、「ヒアドキュメントの無駄な使用」になります。
$ wall
who's out there?
^D
リッチHomolkaはコメントで述べたように、一部のシェルのサポートhere stringsコマンドまたはエンドマーカーなしで文字列リテラルを渡すことができ:
$ wall <<< "who's out there?"
すべてがwallの標準入力に何かを送ります。ながら違いは、パイプラインがそれに別のコマンドの出力を接続することであるhere documentsとhere strings直接文字列を渡します。後者の2つの利点はecho、パイプの例のコマンドがシェル組み込みコマンドであるためwall、すべての場合にの入力を提供するシェルであるため、見た目の美しさです。
echo xxx | yyy私はcludgy見つける構文、wall <<<'your message'