【问题标题】:How to execute Perl qx function with variable如何使用变量执行 Perl qx 函数
【发布时间】:2017-08-10 22:15:46
【问题描述】:

如何让 Perl 的 qx 函数与我的 $opt 变量一起执行?

之前(作品):

my @df_output = qx (df -k /tmp);

我想使用-k-g-H

my @df_output = qx (df -$opt /tmp);

【问题讨论】:

  • 当你尝试这段代码时发生了什么?
  • Use of uninitialized value in concatenation (.) or string at ./tst.pl。还有df: -: No such file or directory。有趣的是,我仍然得到工作输出,但是有这些消息。
  • 那些意思是 $opt 没有定义。
  • @Eevee- 谢谢。这就是问题所在。

标签: perl variables interpolation


【解决方案1】:

你所拥有的应该可以工作,但是:永远不要使用qx。它古老而危险;你输入的任何东西都会通过 shell,所以如果 /bin/sh 不是你所期望的,很容易受到 shell 注入的攻击或遇到意外。

使用open() 的多参数形式,完全绕过shell。

open my $fh, '-|', 'df', "-$opt", '/tmp' or die "Can't open pipe: $!";
my @lines = <$fh>;  # or read in a loop, which is more likely what you want
close $fh or die "Can't close pipe: $!";

【讨论】:

  • system 返回退出状态,而不是进程的标准输出。但它也支持安全的多参数形式,是的。
  • 没有人开始实施多参数开放-|不过在 Windows 中 :(
【解决方案2】:

尝试使用反斜杠\$opt,它可以工作。

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
  • @IanAuld。为什么这不是答案?
猜你喜欢
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
相关资源
最近更新 更多