linux - 管道重定向到 shell 文件的限制?

标签 linux shell freebsd io-redirection

我正在尝试执行以下操作:

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。

您能推荐另一种方法吗?

最佳答案

这里有很多问题。

  1. 一般来说,将输出重定向和管道结合起来并不是一个好主意。一旦重定向,就没有什么可以通过管道传输的了。
  2. 通过管道传输到 echo 没有任何意义。
  3. 使用括号在后台放置一组命令。
  4. 你不应该把它放在后台。
  5. 一般命令从左到右运行,而不是从右到左。

你想要的是

(echo uname > 1.txt; echo ------>>1.txt; uname >>1.txt)


更新(根据对问题的评论和更改)

您将继续使用此命令调用本质上未定义的行为:

uname>>1.txt | echo uname>>1.txt &

来自 uname 的管道无效,因为一旦您重定向了输出,就没有任何东西可以通过管道传输。到 echo 的管道无效,因为它不是从标准输入读取的。 unameecho 命令中的哪一个首先将它的输出打印到文件 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/

相关文章:

bash - 为什么 `(( 0 ))`在.sh脚本中返回值为1?

linux - sh : 0: getcwd() failed: No such file or directory on cited drive

linux - 在其他文件中查找文件名字符串的所有用法

linux - virsh destroy 和 virsh undefine 有什么区别

linux - 如何从脚本创建简单的日志文件

linux - 查找系统中包含目录的最大文件数

linux - 可变频率的调度脚本

PHP PDO 异常 : could not find driver

node.js - 安装nodejs : I need GNU make. 请改为运行 'gmake'

mysql - 表为 'read only'