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.

相关文章

普通模式 >G 增加当前行到文档末尾处的缩紧层级 $ 移动到本行的末尾 . 相当于一个...
原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属...
原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模...
 =   赋值操作符,可以用于算术和字符串赋值 +        加法计算     -        减法运算...
1.根据包名来查看指定的APP指定数据 adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数...
ctrl+F 向下翻页 ctrl+B 向下翻页 u 取消最近一次操作 U 取消当前行的操作 ZZ 保存当前内容并退出 gg 跳...