我正在尝试执行以下操作:
uname>>1.txt | echo #####>>1.txt | echo uname>>1.txt &
得到如下输出:
uname
## ## ## ## ##
Linux(或任何名称)
但是我得到的输出是: 名字
但是如果我尝试:
uname>>1.txt | echo uname>>1.txt &
然后我得到以下输出:
uname
Linux
想知道这种管道重定向是否有一些限制?
============================================= ========================
我将从 tcl 脚本中调用此 shell 命令。实际上,在 tcl 脚本中有一个正在执行的命令列表,输出需要按以下方式格式化 <-------->
我想在后台运行它们以减少执行时间,因为这些命令的输出彼此不相关。
我以为()中的命令会将格式化后的输出作为后台进程输出到1.txt。
您能推荐另一种方法吗?
最佳答案
这里有很多问题。
- 一般来说,将输出重定向和管道结合起来并不是一个好主意。一旦重定向,就没有什么可以通过管道传输的了。
- 通过管道传输到
echo
没有任何意义。 - 使用括号在后台放置一组命令。
- 你不应该把它放在后台。
- 一般命令从左到右运行,而不是从右到左。
你想要的是
(echo uname > 1.txt; echo ------>>1.txt; uname >>1.txt)
更新(根据对问题的评论和更改)
您将继续使用此命令调用本质上未定义的行为:
uname>>1.txt | echo uname>>1.txt &
来自 uname
的管道无效,因为一旦您重定向了输出,就没有任何东西可以通过管道传输。到 echo
的管道无效,因为它不是从标准输入读取的。 uname
或 echo
命令中的哪一个首先将它的输出打印到文件 1.txt
在这里可供选择。这显然是您想要的:
bash -c 'echo uname >> 1.txt; echo ------ >> 1.txt; uname >> 1.txt'
注意 bash
的 -c
选项。这告诉 bash -c
后面的参数是一个包含 shell 命令的字符串。
关于linux - 管道重定向到 shell 文件的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13249069/