【问题标题】:Using local perl variables in shell command在 shell 命令中使用本地 perl 变量
【发布时间】:2017-09-07 15:49:02
【问题描述】:

我正在尝试运行远程查找命令,但我必须将其值从用户的命令行参数中获取的局部变量传递给它。但是,我收到“未定义的变量”错误。我正在做类似的事情:

my $ssh = Net::OpenSSH->new($host);
#I am getting a part of the $path and $pattern from command line
#I have to look for $pattern at the $path
my @files = $ssh->capture(q(find $path -name $pattern) );

当我给出确切的路径和模式时,这个命令运行良好,但是当我用变量替换它时出现错误。

【问题讨论】:

    标签: regex perl shell remote-access openssh


    【解决方案1】:
    q(find $path -name $pattern)
    

    这是文字字符串find $path -name $pattern、美元符号等等。

    Perl 有几种不同的引号。 "" 将插入变量(即用它们的值替换它们),'' 不会。 q() 是写'' 的另一种方式。你想要qq()

    请参阅Quote and Quote-Like Operators in perlop 了解更多信息。

    【讨论】:

    • 是的,谢谢您的回复。现在,它没有给我一个错误,但它无法获得匹配的模式。也就是说,当我将相同的模式存储在变量中但当我直接在命令中使用模式的值时正在运行时,我得到了“find:no match”。再次感谢:)
    • 我的 $pattern = "40786"; #当我写我的@files = $ssh->capture2(qq(find /u1/temp -name "40786") ); #but return not found 当我使用变量 $pattern 对不起,如果这是一个愚蠢的问题。我是 perl 新手,在其他地方找不到解释。
    • @emma 这应该可以。没有周围的代码,我无法告诉你出了什么问题。我建议您提出一个新问题并提供一个不起作用的完整程序。
    猜你喜欢
    • 2012-10-17
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多