我在执行“|”时遇到问题root模式下命令,命令如下
cat xyz.sh | chmod 744 xyz.sh | echo "hello" > xyz.sh
当我使用运行此命令时./xyz.sh,出现错误
./xyz.sh: line 1: hello: command not found
请指定我。如果,我做错事了!
答案1
首先,你需要了解什么是管道:
管道是由控制运算符分隔的一个或多个命令的序列
|
。对于除最后一个命令之外的每个命令,shell 应将命令的标准输出连接到下一个命令的标准输入
您的管道中发生的情况如下:
cat
将 的内容发送xyz.sh
到下一个命令的标准输入。chmod
接收该数据,但据我所知,它不会对其执行任何操作。相反,它会更改下一个命令的权限xyz.sh
,并且不会向其标准输入发送任何内容。echo
什么也没收到,但这并不重要,因为echo
一开始就没有读取标准输入。作为钢铁起子说,用单词echo
覆盖 的内容。xyz.sh
hello
然后,如果您尝试运行xyz.sh
,您的 shell 找到的唯一语句是hello
and 它将尝试hello
作为命令运行。您没有hello
安装任何命令,所以这就是您收到command not found
错误的原因。