bash – 如何在当前shell中执行命令的输出?

前端之家收集整理的这篇文章主要介绍了bash – 如何在当前shell中执行命令的输出?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很清楚源(aka。)实用程序,它将从文件获取内容并在当前shell中执行它们。

现在,我将一些文本转换为shell命令,然后运行它们,如下所示:

$ ls | sed ... | sh

ls只是一个随机的例子,原始文本可以是任何东西。 sed也是,只是一个转换文本的例子。有趣的位是sh。我管任何我得到的嘘,它运行它。

我的问题是,这意味着启动一个新的子shell。我宁愿让命令在我当前的shell中运行。像我可以做的源一些文件,如果我有一个文本文件中的命令。

我不想创建一个临时文件,因为感觉脏。

或者,我想开始我的子shell与我当前的shell完全相同的特性。

更新

好的,使用backtick的解决方案肯定工作,但我经常需要这样做,而我检查和更改输出,所以我更喜欢如果有一种方法来管道的结果到最后的东西。

悲伤的更新

啊,/ 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和破折号(如果你更改源。)。显然这是bugs在bash 3.2。从bash 4.0 release notes

Fixed a bug that caused `.’ to fail to read and execute commands from non-regular files such as devices or named pipes.

猜你在找的Bash相关文章