1

kスクリプトwget内で呼び出しの出力を取得する必要があります。ただし、双方向I / Oawを使用していると、何らかの理由でwget呼び出しが失敗します。

私の試みは(MWE形式で):

ループを使用して複数の行をキャプチャします。

echo http://www.del-rio.net/images/festival/medium/2000_0516_Ellen_Burstyn_1274-1-4.jpg | awk '{
  cmd = "wget -t 1 $0";
  while ( (cmd | getline line) > 0 ){
    result = result " " line;
  }     
  print result;
  close (cmd);
 }'

そして、単一の行を使用します。これは、非動詞オプションを使用した場合と使用しない場合で試しました。オプションを指定したwget呼び出し-nvは1行しか返さないためです。

 echo http://www.del-rio.net/images/festival/medium/2000_0516_Ellen_Burstyn_1274-1-4.jpg | gawk '{
  "wget -t 1 -nv $0" | getline line;   
  print line;
}'

ただし、どちらの場合も停止し、次のメッセージが表示されます。

--22:09:09--  http://sh/
          => `index.html' 
Resolving sh... failed: Host not found.

私は何か間違ったことをしていますか?またはwgetこのパイプモードでは機能しませんか?awkその場合、スクリプト内の変数で呼び出しの結果を取得するにはどうすればよいですか。

4

2 に答える 2

1

$0 を引用符の外に移動します。つまり、次のようにします。

"wget... " $0

これの代わりに:

"wget... $0"

関係ありませんが、スクリプトを乱雑にしている null ステートメント (末尾のセミコロン) をすべて取り除きます。

于 2012-11-22T15:30:16.563 に答える
0

主な問題は、wget出力が標準出力ではなく stderr にリダイレクトされることです。したがって、getlineがそれをキャプチャすることはありません (私の知る限り)。

したがって、私の解決策は、ログ出力を標準出力にリダイレクトしてから行を処理することでした。

また、Ed Mortonが指摘したように、ホストが解決しない問題は$0、引用符内の変数でした。

したがって、すべてをまとめると、次のようになります

echo http://www.absolutely.net/wenn/handy_manny_05_wenn5360250.jpg  | awk '{
  cmd = "wget -t 1 " $0 " 2>&1"
  while ( (cmd | getline line) > 0 ){
    result = result " " line
  }
  close(cmd)
  print "the result: " result
}'
于 2012-11-23T02:22:31.383 に答える