Answers:
问题在于链接文章中使用的语法。要了解到底出了什么问题,让我们看一下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
另一种方法是使用here文档。A here document是一个shell构造,将字符串(直到其自身的一行上的指定结束标记)直接传递到命令的标准输入,而没有使不同的命令产生该输出的中间步骤:
$ wall << .
who's out there?
.
这将是“此处文档的无用使用”,因为默认情况下,终端本身将连接到wall的标准输入,wall并将开始从其读取直到接收到文件结束符(Ctrl+D):
$ wall
who's out there?
^D
正如Rich Homolka在评论中指出的那样,一些shell支持here strings允许传递不带命令或结束标记的文字字符串:
$ wall <<< "who's out there?"
所有的东西都wall输入到的标准输入中。区别在于,管道将另一个命令的输出连接到它,而here documents并here strings直接传递字符串。后两者的优点是美观,因为echo管道示例中的命令是Shell内置命令,因此它将成为wall在所有情况下提供的输入的Shell 。
wall <<< stringsintax。太好了 你们两个都可以解释<<<正在做什么吗(为什么像peth所说的那样效率更高)?我觉得需要文件的cmd可以接受之后的字符串,这很奇怪<<<。再次感谢。
wall接受它的原因(如果不这样做,则从stdin读取墙) t指定一个文件)。作为验证herestrings是否创建文件的一种方式,$ readlink /proc/self/fd/0 <<< test将显示/tmp/sh-thd-4228536315 (deleted)。
尝试用root
root@username:~# wall /home/username/yourfile_name
如果您的文件位于主目录中,请尝试其他路径
echo xxx | yyy语法的格式,我觉得这很笨拙wall <<<'your message'