【问题标题】:Why does "set VAR=value" not work in bash? [duplicate]为什么“set VAR=value”在 bash 中不起作用? [复制]
【发布时间】:2019-03-18 16:41:25
【问题描述】:

我在正确设置环境变量时遇到问题。

这些是我的 deploy.sh 的前几行:

if [[ -z ${PEM_PATH+x} ]]; then
    printf "Please set the PEM_PATH environment variable\n"
    exit 1
fi

这是我的终端输出:

bash-3.2$ set PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem"
bash-3.2$ ls
Jenkinsfile     bps-dashboard.iml   mvnw            node_modules        package.json        src         webpack.config.js
README.md       deploy.sh       mvnw.cmd        package-lock.json   pom.xml         target
bash-3.2$ set PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem"
bash-3.2$ echo $PEM_PATH
/Users/Elasticsearch/Desktop/ec2-poc.pem
bash-3.2$ sh deploy.sh
Please set the PEM_PATH environment variable
bash-3.2$

我在这里做错了什么?

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    set 不在 bash(或其他 POSIX 系列 shell)中设置变量——它配置 shell 选项标志,或更改活动参数列表($1$2 等)。

    您可以运行以下任何命令将PEM_PATH 定义为环境变量(没有export-x 参数到declare 或使用set -a,它将是一个常规的、非导出的shell变量):

    • export PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem" -- 使用单个命令定义和导出变量。
    • PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem"; export PEM_PATH -- 首先将 PEM_PATH 定义为常规 shell 变量,然后将其提升为环境变量
    • declare -x PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem" -- 使用 bash-only 扩展 declarePEM_PATH 定义为导出变量。
    • set -a; PEM_PATH="/Users/Elasticsearch/Desktop/ec2-poc.pem"; set +a -- 使用set -a 使所有变量默认导出到环境中;然后设置变量;然后关闭该标志。

    【讨论】:

    • 这似乎行得通。谢谢!
    • np。我们很可能实际上有一个副本,在这种情况下,无论如何我都会将此答案转换为社区 wiki(不拥有所有权/声誉)。
    猜你喜欢
    • 2019-02-19
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多