如何解决Perl中传入参数作为命令执行无输出的问题?
解决Perl通过命令行参数传递执行代码无输出的问题
问题出在你当前的写法中,Perl只是把$o当作一个变量引用,既不会执行变量内的代码,也不会默认输出变量的内容。要让Perl执行参数传入的代码,需要用eval来解析并执行变量中的字符串代码。
修复后的命令
options='print' echo 'Hello world' | perl -0777snE 'eval $o' -- -o="$options"
原理说明
-E '$o'仅表示在Perl代码中引用变量$o,此时$o的值是字符串print,Perl不会主动执行这个字符串里的代码,也不会输出该字符串。eval $o会让Perl把$o中的字符串当作Perl代码执行,这样就会触发print命令,输出管道传入的内容。
额外注意事项
- 如果
options中的代码包含特殊字符(比如引号、管道符等),需要注意shell的转义处理,避免被shell提前解析。 eval存在安全风险,如果options的内容来自不可信来源,可能会执行恶意代码,使用时需谨慎。
内容的提问来源于stack exchange,提问作者Mario Palumbo
相关产品推荐
相关产品推荐

