我有一段代码可以读取 txt 文件,并应该将其中的行读入命令中。然后,该命令的输出也应该逐行读入另一个命令中。我的外循环可以工作(我已经使用 echo 对其进行了测试),但我的嵌套循环却不行:
#!/bin/bash
while read p; do
folder="$(aws s3 ls s3://a-bucket/users/ --recursive | grep ${p} | cut -c 32-)"
while read -r line
do
aws s3 cp s3://a-bucket/"$line" 'c:/users/basud/desktop/testerData' --recursive
done <<< "$folder"
done < testIDs.txt
对于 testIDs.txt 的每一行,读入“文件夹”的第一行的输出如下所示:
users/3e8c95b4-c5ee-4edc-954e-6d988d30557e/111BEF99-5AB6-486A-ABD5-A4682CE0D491-LEFT.zip
users/3e8c95b4-c5ee-4edc-954e-6d988d30557e/111BEF99-5AB6-486A-ABD5-A4682CE0D491-RIGHT.zip
我想将“folder”的每一行传递到“a-bucket/”后面的 aws 命令中,以添加到路径名中。我一直没有输出。非常感谢您的帮助。
答案1
你的代码应该可以工作
$ folder="$(echo 1; echo 2)"; while read -r line; do echo "line: $line"; done <<< "$folder"
line: 1
line: 2
但对于你的情况我会用这个:
aws s3 ls s3://a-bucket/users/ --recursive | grep ${p} | cut -c 32- |
while read -r line
do
aws s3 cp s3://a-bucket/"$line" 'c:/users/basud/desktop/testerData' --recursive
done
要调试原始脚本(或任何其他脚本),请使用 运行它bash -x
。