【发布时间】:2019-01-31 10:09:32
【问题描述】:
我正在尝试遍历文件 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 传递给另一个循环。
【问题讨论】:
-
您对变量的使用看起来不错。你确定
aws ... | grep ... | cut命令返回的是你想要的吗? -
确保
testIDs.txt有 Unix 换行符,而不是 Windows CRLF。 -
尝试用
dos2unix testIDs.txt修复它 -
你也可以在这前面加上
set -x,让shell在执行之前打印每一个命令(或者它的等价物);这将使发生的事情更清楚(包括显示通常不可见的字符,如回车)。 -
@Barmar 我想你解决了。在我的 testID 上运行 dos2unix。该命令现在回显“文件夹”中的内容。谢谢!
标签: bash amazon-web-services loops variables subshell