dre*_*mac 6 bash scripting interop pipe 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)
为什么这样不好?因为很多原因;最为显着地:
$(echo 'date +%s')它可能会起作用;但这只是非常糟糕地代表了您在这里真正所做的事情。bashshell 功能,例如参数扩展、bash 关键字等。很好,但不方便:
perl foo.pl > mytmpfile; bash mytmpfile
创建一个临时文件来放入 Perl 脚本的输出,然后使用 bash 运行该文件是可行的,但它很不方便,因为您需要创建(并清理!)临时文件并将其放在可移植可写(且安全!)的位置。
另请记住不要使用.或source执行临时文件,除非您确实打算在活动 shell 中运行它。此外,当您使用.或 时source,您将无法可靠地清理临时文件。
可能是最好的解决方案:
perl foo.pl | bash
当然,假设您的 perl 脚本输出正确的 bash 语法,那么这是非常安全的(在最不容易出现错误的情况下是“安全”)。
具有几乎相同功能的替代方案:
bash < <(perl foo.pl)
bash <(perl foo.pl)
| 归档时间: | 
 | 
| 查看次数: | 1788 次 | 
| 最近记录: |