Проблема заключается в синтаксисе, используемом в связанной статье. Чтобы понять, что именно идет не так, давайте посмотрим на man wall:
Использование от man wall:
wall [file]
Wall displays the contents of file or, by default, its standard input
Так что wallпринимает любой из двух источников для своего сообщения.
Аргумент имени файла
Любой заданный аргумент командной строки wallдолжен быть именем файла. Поскольку не существует надежного способа определить, подразумевается ли аргумент в качестве имени сообщения или файла, wallон предположит, что это последнее, игнорирует все, что поступает при стандартном вводе , и попытается прочитать сообщение из этого файла.
В данном случае он пытается прочитать файл who's out thereи не находит его. Обратите внимание, что чтение из файла обычно ограничено суперпользователем. Если бы вы работали wall "who's out there"как непривилегированный пользователь, скорее всего, его вывод был быwall: will not read who's out there - use stdin.
Стандартный ввод
Если он не получает аргумент имени файла в своей командной строке, он начнет чтение из стандартного ввода. Существует несколько способов подачи информации на стандартный ввод команды. Одним из них является использование канала UNIX . Конвейер соединит стандартный вывод своей команды на левой стороне со стандартным вводом своей команды на правой стороне:
$ echo "who's out there" | wall
Другой способ - использовать здесь документ . A here documentпредставляет собой конструкцию оболочки, которая передает строку (до указанного конечного маркера в отдельной строке) непосредственно на стандартный ввод команды, без промежуточного шага, когда отдельная команда создает такой вывод:
$ wall << .
who's out there?
.
Это было бы «бесполезным использованием здесь документов», потому что по умолчанию сам терминал будет подключен к wallстандартному вводу России и wallначнет читать с него, пока не получит символ конца файла ( Ctrl+D):
$ wall
who's out there?
^D
Как отметил Рич Хомолка в комментариях, некоторые оболочки поддерживают here stringsвозможность передачи буквенной строки без маркеров команды или конца:
$ wall <<< "who's out there?"
Все подают что-то для wallстандартного ввода. Разница в том, что конвейер соединяет с ним выходные данные другой команды here documentsи here stringsпередает строку напрямую. Преимущество последних двух здесь эстетическое, так как echoкоманда из примера канала представляет собой встроенную команду оболочки, поэтому она будет оболочкой, обеспечивающей wallввод во всех случаях.
echo xxx | yyyсинтаксиса, который я нахожу хитрымwall <<<'your message'