0

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

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

获得以下输出:

uname
## ## ## ## ##

Linux(或任何名称)

但相反,我得到的输出是: uname

但是,如果我尝试:

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

然后我得到以下输出:

uname

Linux 

想知道这种管道重定向是否有一些限制?

==================================================== ======================

我将从 tcl 脚本中调用这个 shell 命令。实际上有一个从 tcl 脚本中执行的命令列表,输出需要按以下方式格式化 <------->

我想在后台运行它们以减少执行时间,因为这些命令的输出彼此不相关。

我认为 () 中的命令会将格式化的输出输出到 1.txt 作为后台进程。

你会建议另一种方法吗?

4

1 回答 1

2

这里有很多问题。

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

你想要的是

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


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

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

uname>>1.txt | 回声 unname>>1.txt &

来自的管道uname是无效的,因为一旦您重定向了输出,就没有任何东西可以管道了。管道echo无效,因为不从标准输入读取。哪个unameecho命令首先将它的输出打印到文件1.txt中,这里有待讨论。这显然是你想要的:

bash -c 'echo uname >> 1.txt; 回声 ------ >> 1.txt; unname >> 1.txt'

请注意-c选项bash。这告诉 bash 后面的参数-c是一个包含 shell 命令的字符串。

于 2012-11-06T10:43:42.123 回答