【问题标题】:Perl code - pipe "|" in `open()` statementPerl 代码 - 管道“|”在 `open()` 语句中
【发布时间】:2014-11-23 01:57:04
【问题描述】:

我在 Perl .pl 文件中有以下代码。你认为这段代码有什么问题吗(我不明白它是如何工作的,因为在第二行有一个“|”字符,后面没有命令)

while ( $temp ne "" ) {
        open( PS, "ps -ef | grep deploy.sh | grep ssh | grep -v grep|" );
        $temp = <PS>;
        close(PS);
        print "The Deploy scripts are still running.  Now sleeping 20\n";
        sleep 20;
}

【问题讨论】:

  • 对于它的价值,ps -ef | grep process | grep -v grep 的一种更节俭的说法是ps -ef | grep [p]rocess

标签: perl file-io while-loop grep pipe


【解决方案1】:

那个流浪|是 Perl 的一种说法,即您希望该命令的输出可用于您的程序。有几种等价形式。

看看这里:open - perldoc.perl.org。特别是在上面写着:

open(FOO, "cat -n '$file'|");

【讨论】:

    【解决方案2】:
    open(my $FOO, "foo");
    

    打开文件进行读取,同时

    open(my $FOO, "foo |");
    

    告诉 Perl foo 是要运行的命令,其输出将通过管道传送到文件句柄 $FOO

    【讨论】:

      【解决方案3】:

      由于 open(FOO, "foo |") 只是从 FOO 读取 foo 命令的输出,因此 foo 命令输出中的每一行都将成为 FOO 文件中的一行。以下将与 shell 命令 'ps -ef' 相同:

      open(PS, 'ps -ef |');
      while (<PS>) { print $_ }
      

      示例第 2 行中的命令是 shell 管道过滤列表以在“deploy.sh”的运行实例上生成,如果文件有一行,则仍有实例在运行,这就是它只读取$temp 变量中的第一行输入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多