我在一个目录下有2个bash脚本。第一个脚本被运行并执行。
curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
unzip awscli-bundle.zip
./awscli-bundle/install -b ~/bin/aws
export PATH=~/bin:$PATH
eval $(aws ecr get-login --region eu-west-2 --no-include-email) # executes OK
第二个脚本被运行并执行。
configure_aws_cli() {
aws --version
aws configure set default.region eu-west-2
aws configure set default.output json
echo "AWS configured."
}
configure_aws_cli
为什么我得到的是 aws: command not found
?
即使在违反DRY这样的情况下,我也会得到这个错误。
curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
unzip awscli-bundle.zip
./awscli-bundle/install -b ~/bin/aws
export PATH=~/bin:$PATH
configure_aws_cli() {
aws --version
aws configure set default.region eu-west-2
aws configure set default.output json
echo "AWS configured."
}
configure_aws_cli
如果你只是执行一个脚本,它将会被子进程执行,你的 "export PATH "将与这个子进程一起死掉。
. ./first.sh
./second.sh
当你出于某种原因,用不同的解释器运行两个脚本时,就会发生这种情况。
你的脚本在Bash下工作,因为它扩展了 ~
都在 =
并在 PATH
. 它失败的原因是如。dash
.g.中失败,而e.g.既不成功也不失败。
你可以通过在所有的shell中使用 $HOME
而不是 ~
:
export PATH="$HOME/bin:$PATH"
如果你还想让PATH的改变适用于未来的脚本,常规的。source
规则适用。
通过使用安装AWS命令行工具解决问题。pip
而不是从AWS提供的公共API中提取。没有乱七八糟的 PATH
有必要。