如何在当前shell中执行命令的输出?
我很清楚source (aka . )实用程序,它将从文件中获取内容并在当前shell中执行它们。 
现在,我正在将一些文本转换成shell命令,然后运行它们,如下所示:
 $ ls | sed ... | sh 
  ls只是一个随机的例子,原文可以是任何东西。  sed也是,只是一个例子来转换文本。 有趣的是sh 。 我pipe任何我得到的东西,它运行它。 
 我的问题是,这意味着启动一个新的子shell。 我宁愿让命令在我的当前shell中运行。 就像我可以做的source some-file ,如果我有一个文本文件中的命令。 
我不想创build一个临时文件,因为感觉脏。
另外,我想开始我的子shell与我目前的shell完全相同的特征。
更新
好的,使用反引号的解决scheme当然是有效的,但是当我检查和改变输出时,我经常需要这样做,所以我更喜欢是否有办法将结果转化为结果。
伤心的更新
 嗯, /dev/stdin东西看起来非常漂亮,但是,在更复杂的情况下,它不起作用。 
所以,我有这个:
 find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/git mv -f $1 $2.doc/i' | source /dev/stdin 
 这确保所有.doc文件的扩展名都是小写的。 
 而顺便说一句,可以用xargs来处理,但那不是重点。 
 find . -type f -iname '*.doc' | ack -v '\.doc$' | perl -pe 's/^((.*)\.doc)$/$1 $2.doc/i' | xargs -L1 git mv 
所以,当我运行前者时,它会立即退出,没有任何反应。
 $ ls | sed ... | source /dev/stdin 
  更新:这工作在bash 4.0,以及tcsh和破折号(如果你改变source . )。 显然这是在bash 3.2中的越野车。 从bash 4.0发行说明 : 
修正了导致`。'的错误。 无法读取和执行非常规文件(如设备或命名pipe道)的命令。
  eval命令是为了这个目的而存在的。 
 eval "$( ls | sed... )" 
更多来自bash手册 :
EVAL
eval [arguments]参数被连接在一起成为一个单一的命令,然后被读取和执行,其退出状态作为eval的退出状态返回。 如果没有参数或只有空的参数,返回状态是零。
哇,我知道这是一个古老的问题,但最近我发现自己也遇到了同样的问题(我就是这么来的)。
 无论如何 – 我不喜欢source /dev/stdin答案,但我想我find了一个更好的答案。 实际上这看起来很简单: 
 echo ls -la | xargs xargs 
很好,对吧? 实际上,这仍然不能达到你想要的,因为如果你有多条线路,它们将把它们连接成一个命令,而不是分别运行每个命令。 所以我find的解决scheme是:
 ls | ... | xargs -L 1 xargs 
  -L 1选项意味着每个命令执行使用(最多)1行。  注意:如果你的行以尾部空格结束,它将与下一行连接在一起! 所以确保每一行以非空格结束。 
最后,你可以做
 ls | ... | xargs -L 1 xargs -t 
看看执行了什么命令(-t是详细的)。
希望有人读这个!
尝试使用进程replace ,它用一个临时文件取代一个命令的输出,然后可以find它:
 source <(echo id) 
我相信这是对这个问题的“正确答案”:
 ls | sed ... | while read line; do $line; done 
 也就是说,人们可以把它们变成一个while循环。  read命令命令从它的stdin取出一行,并将其分配给variables$line 。  $line然后成为循环内执行的命令; 并继续,直到input中没有其他行。 
这仍然不能用于一些控制结构(如另一个循环),但在这种情况下它适合于法案。
 `ls | sed ...` 
 我有点像ls | sed ... | source - ls | sed ... | source -  ls | sed ... | source -会更漂亮,但不幸的是source不明白-意思是stdin 。 
我认为你的解决scheme是反引号的命令replace: http : //tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html
参见3.4.5节
 那么为什么不使用source呢? 
 $ ls | sed ... > out.sh ; source out.sh 
source / dev / stdin在我需要分配variables的时候并不适用于我。 freenode bash上的geirha指向我http://mywiki.wooledge.org/BashFAQ/024,并build议我尝试一个进程替代源<(命令),它为我工作;