在 Bash 中逐行将变量传递给另一个命令

在 Bash 中逐行将变量传递给另一个命令

我有一段代码可以读取 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

相关内容