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. $1エラー メッセージは、二重引用符で囲まれた文字列で使用されている を Perl が解釈するという事実から来ています。ただし、あなたの意図は、そのそのままを に渡すことでした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

渡した文字列では、Perlが定義していない$1変数を探すようになっているようです。文字列の前にa を置いて、文字列内の the を$1エスケープしてみてください。$\

文字列が有効ではないため、2番目のエラーが発生するオープンは行われません。

于 2012-12-09T12:42:01.190 に答える