加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 16:29:54 所属栏目:安全 来源:网络整理
导读:我很清楚源(aka。)实用程序,它将从文件中获取内容并在当前shell中执行它们。 现在,我将一些文本转换为shell命令,然后运行它们,如下所示: $ ls | sed ... | sh ls只是一个随机的例子,原始文本可以是任何东西。 sed也是,只是一个转换文本的例子。有趣的
我很清楚源(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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读