こんにちは、
スクリプトに引数として渡されたファイル(または複数のファイル)の値を繰り返し実行しようとすると、各ファイルの最初の行だけが認識されます./myscript file1 file2 ...
。awk
#!/bin/bash
while [[ ${#} > 0 ]]
do
for archivo in ${@}
do
read url filename <<<$(awk -F',' '{print $1, $2}' $archivo)
curl -o $filename $url
done
done
スクリプトに引数として渡されるファイルの構造は次のとおりです。
url1,filename1
url2,filename2
...
目的は、1つ以上のパラメータを使用してスクリプトを呼び出すたびに、リストされたファイルをダウンロードawk
するために各ファイルに含まれるURLとファイル名を解析(および渡す)する必要があることです。curl
どのように動作させるための提案がありますか?
事前に感謝し、良い一日をお過ごしください!
答え1
url
混乱しているように見えるループ構造(各ファイルから一対の - のみを読む)に加えて、filename
引用符のないコマンド置換はデフォルト$(awk -F',' '{print $1, $2}' $archivo)
でトークン化され、IFS
awk出力は1行にリンクされます。比較する:
$ echo $(printf 'foo bar\nbaz bam\n')
foo bar baz bam
比較的
$ echo "$(printf 'foo bar\nbaz bam\n')"
foo bar
baz bam
しかし、これは実際にawkの無駄な使用です。シェルを設定してファイルを直接読み取ることができIFS
ます,
。たぶんあなたが望むもの:
for archivo in "$@"
do
while IFS=, read -r url filename rest
do
curl -o "$filename" "$url"
done < "$archivo"
done