Mac下如何将wget与AWS Lambda的URL生成命令串联执行?
命令合并失败原因及解决办法
我想通过aws lambda get-function获取Lambda函数源代码的URI,再用wget下载对应压缩包。分开执行以下命令完全正常:
$ aws lambda get-function --function-name my-function --query 'Code.Location' https://prod-foo/somelongawsuri $ wget -O somefile.zip https://prod-foo/somelongawsuri Downloaded
但尝试合并成单条命令时失败了,我写的错误命令是:
url=$echo(aws lambda get-function --function-name my-function --query 'Code.Location') | wget $url
错误原因
- 变量赋值语法错误:正确的命令替换应该用
$(command),而非$echo(command)这种错误写法 - 管道符使用逻辑错误:管道的作用是传递前一个命令的输出内容,这里错误地试图用它传递未定义的变量
- 执行顺序错误:
wget $url会在变量$url完成赋值前就执行,导致调用时变量为空
可行的合并命令
反复尝试后,以下命令可以正常工作:
aws lambda get-function --function-name myfunction --query 'Code.Location' | xargs wget
如果需要指定下载后的文件名,可以调整为:
aws lambda get-function --function-name myfunction --query 'Code.Location' | xargs -I {} wget -O somefile.zip {}
内容的提问来源于stack exchange,提问作者Lester Gray
相关产品推荐
相关产品推荐

