为什么AWS cli被一个bash脚本看到,而另一个看不到?

问题描述 投票:0回答:1

我在一个目录下有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
bash
1个回答
0
投票

如果你只是执行一个脚本,它将会被子进程执行,你的 "export PATH "将与这个子进程一起死掉。

. ./first.sh
./second.sh

0
投票

当你出于某种原因,用不同的解释器运行两个脚本时,就会发生这种情况。

你的脚本在Bash下工作,因为它扩展了 ~ 都在 = 并在 PATH. 它失败的原因是如。dash.g.中失败,而e.g.既不成功也不失败。

你可以通过在所有的shell中使用 $HOME 而不是 ~:

export PATH="$HOME/bin:$PATH"

如果你还想让PATH的改变适用于未来的脚本,常规的。source 规则适用。


0
投票

通过使用安装AWS命令行工具解决问题。pip 而不是从AWS提供的公共API中提取。没有乱七八糟的 PATH 有必要。

© www.soinside.com 2019 - 2024. All rights reserved.