0

我想将此 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.
4

2 回答 2

4

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

  1. 为了在 Perl 中打开管道并检索结果,您必须在调用|的最后添加“” 。open
  2. 错误消息来自 Perl 解释$1您在该双引号字符串中使用的事实。但是,您的意图是将其逐字传递给awk. 因此,您必须$在 Perl 方面使用\$.
  3. /etc/passwd论点前面缺少一个空格。

摘要:这应该会更好:

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

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

于 2012-12-09T12:45:23.427 回答
0

看起来$1你传递的字符串让 Perl 寻找一个$1你没有定义的变量。尝试通过在字符串前面$放置 a来转义字符串。\

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

于 2012-12-09T12:42:01.190 回答