首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制管道重定向到shell上的文件?

限制管道重定向到shell上的文件?
EN

Stack Overflow用户
提问于 2012-11-06 18:29:29
回答 1查看 402关注 0票数 0

我正在尝试做以下几件事:

代码语言:javascript
复制
uname>>1.txt | echo #####>>1.txt | echo uname>>1.txt &

要获得以下输出:

代码语言:javascript
复制
uname
## ## ## ## ##

Linux (或其他任何名称)

但是我得到的输出却是: uname

但是,如果我只尝试:

代码语言:javascript
复制
uname>>1.txt | echo uname>>1.txt &

然后,我会得到以下输出:

代码语言:javascript
复制
uname

Linux 

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

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

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

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

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

你能推荐另一种方法吗?

EN

回答 1

Stack Overflow用户

发布于 2012-11-06 18:43:42

这里有很多问题。

  1. 总的来说,将输出重定向和管道结合起来不是一个好主意。一旦重定向,就没有什么可以管道了。
  2. 管道到echo没有任何意义。
  3. 使用括号在background.
  4. You中放置一套命令不应该将其放在从左到右运行的background.
  5. In通用命令中,而不是从右到左运行。

你想要的是

(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后面的参数是一个包含外壳命令的字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13249069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档