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

将脚本的输出作为独立的bash命令运行

发布时间:2020-12-16 01:16:42 所属栏目:安全 来源:网络整理
导读:假设您有一个perl脚本“foobar.pl”,它将以下内容输出到stdout date -R 并且您希望将perl脚本输出的任何内容作为独立的bash命令运行(不要担心安全问题,因为它在受信任的环境中运行). 你如何让bash认识到这是一个独立的命令? 我尝试过使用xargs,但似乎只想将
假设您有一个perl脚本“foobar.pl”,它将以下内容输出到stdout
date -R

并且您希望将perl脚本输出的任何内容作为独立的bash命令运行(不要担心安全问题,因为它在受信任的环境中运行).

你如何让bash认识到这是一个独立的命令?

我尝试过使用xargs,但似乎只想将参数传递给预先定义的命令.

我希望perl脚本能够输出任意命令.

$command = 'date -R'
system($command); ## in the perl script

以上不起作用,因为我希望它在现有的cygwin环境中运行…

foobar.pl | xargs bash -i {}

上面的方法不起作用,因为bash似乎正在运行一个新进程,因此bash_profile的初始化和设置不会被实例化.

坏:
`perl foo.pl`
$(perl foo.pl)

为什么这么糟糕?由于这么多原因;最为显着地:

> Wordsplitting:你在这里做的是获取perl脚本的输出,将其分成块,只要有空格,制表符或换行符,并将这些块作为参数传递给第一个块,即运行命令.在非常简单的情况下,例如$(echo’date%s’)它可能会起作用;但这只是你真正在这里做的非常糟糕的表现.
>您不能引用或使用任何其他bash shell功能,如参数扩展,bash关键字等.

好,但不方便:

perl foo.pl > mytmpfile; bash mytmpfile

创建一个临时文件来将你的perl脚本的输出放入然后用bash运行,但是这很不方便,因为你需要创建(并清理!)你的临时文件并将它放在一个可移植的可写(和安全!)位置.

还记得不要用.或者来源执行临时文件,除非你真的打算在活动shell中运行它.而且,当你使用.或来源,您将无法可靠地清理您的临时文件.

可能是最好的解决方案:

perl foo.pl | bash

假设你的perl脚本输出正确的bash语法,这是全面安全的(在上下文中“安全”,最不容易出错).

替代品几乎完全相同:

bash < <(perl foo.pl)
bash <(perl foo.pl)

(编辑:李大同)

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

    推荐文章
      热点阅读