将multipiped输出重定向到perl中的文件句柄

时间:2012-12-09 12:34:41

标签: perl

我想将此awk输出重定向到文件句柄,但没有运气。

代码:

open INPUT,"awk -F: '{print $1}'/etc/passwd| xargs -n 1 passwd -s | grep user";
while (my $input=<INPUT>)

{
...rest of the code
}

错误:

Use of uninitialized value in concatenation (.) or string at ./test line 12.
readline() on closed filehandle INPUT at ./test line 13.

2 个答案:

答案 0 :(得分:4)

显示的错误消息与主题中的问题没有直接关系。

  1. 要打开管道并在Perl中检索结果,您必须在|来电的最后添加“open”。
  2. 错误消息来自Perl解释您在该双引号字符串中使用的$1这一事实。但是,您的意图是将该逐字传递给awk。因此,您必须使用$来逃避Perl端的\$
  3. /etc/passwd参数前面缺少一个空格。
  4. 总结:这应该会更好:

    open INPUT,"awk -F: '{print \$1}' /etc/passwd| xargs -n 1 passwd -s | grep user|";
    

    但是,您还应检查错误等。

答案 1 :(得分:0)

您传递的字符串中的$1似乎使Perl查找您尚未定义的变量$1。尝试通过在其前面放置$来转义字符串中的\

因为字符串无效,所以它不会打开,然后产生第二个错误。