我正在尝试遍历文件ID字符串(testIDs.txt)的逐行列表,并将其传递给AWS命令。该命令应使用循环变量,并且命令的输出应存储在“文件夹”变量中。每当我运行脚本时,在终端中都会得到空格作为输出。
#!bin/bash
while read p; do
folder=$(aws s3 ls s3://a-bucket/ --recursive | grep "${p}" | cut -c 32-)
echo "${folder}"
done < testIDs.txt
AWS命令的输出应该是两个字符串,并且通过在终端中单独运行AWS行并使用字符串而不是${p}
来检查这是否成立。
注意:现在,我只想打印folder
,但是稍后我将folder
传递到另一个循环。
答案 0 :(得分:0)
您可能只想使用两个for循环,(1)将存储桶的内容读取到temp(可选/可以直接对其进行搜索),(2)遍历ID,以及(3)遍历存储桶的每一行,查找ID。
示例:
将文件夹结构读取到本地温度,然后对于每个ID,查看文件行中的testID,然后将其打印到结果文件中。
#!bin/bash
TMP="/tmp/s3-log-${RANDOM}.dat"
RESULTS="/tmp/s3-log-results.txt"
ID_FILE="testIDs.txt"
> "${RESULTS}"
aws s3 ls s3://a-bucket/ --recursive > "${TMP}"
while read p; do
while IFS= read -r line ;do
if ! [[ $line = *"${p}"* ]]; then
echo "id: ${p} => $(echo ${line} | cut -c 32-)" | tee -a "${RESULTS}"
fi
done < "${TMP}"
done < "${ID_FILE}"
答案 1 :(得分:0)
这可能就是您要找的;如果您不知道需要循环多少个值,请使用 while 循环:
while read -r -d $'\t' resourceName; do
echo "$resourceName"
done <<< "$(aws transfer list-servers --query='Servers[*].ServerId' --output text)"
在这种情况下,是 -d $'\t'
影响输出 AWS 资源列表中的 Bash word-splitting。