【发布时间】:2018-11-01 16:28:41
【问题描述】:
我在适用于 Linux 的 Windows 子系统上运行 Ubuntu,并且我想要运行一个需要访问系统环境变量的 bash 脚本。具体来说,我使用以下命令在我的系统上定义了一个环境变量:
export SLACK_LEGACY_API_TOKEN="Insert Token Here"
然后我定义一个名为 slack.sh 的文件,如下所示:
#!/usr/bin/env bash
echo $SLACK_LEGACY_API_TOKEN
然后我用source ./slack.sh 运行这个脚本。当我运行这个命令时,它只是打印出一个空行——它没有得到环境变量的值。
我在 .sh 文件中尝试了不同的语法来引用环境变量,例如 "$SLACK_LEGACY_API_TOKEN" 和 ${SLACK_LEGACY_API_TOKEN},但结果相同。我还使用/slack.sh 和. ./slack.sh 运行了脚本,但结果相同。
如何让我的脚本看到$SLACK_LEGACY_API_TOKEN?
【问题讨论】:
-
slack.sh和slack_delete.sh是不同的文件吗? -
如果
slack.sh以 DOS 行结尾保存,那么您正在尝试扩展变量SLACK_LEGACY_API_TOKEN\r,而不是SLACK_LEGACY_API_TOKEN(其中\r表示 CR/LF 的回车对终止行)。 -
通过在脚本内部运行
env或在行中附加一些其他字符(例如,echo $SLACK_LEGACY_API_TOKEN x)来确认环境变量是否存在,这会将变量名称与CR/LF 对。使用echo ${SLACK_LEGACY_API_TOKEN}也应该足以防止变量名被“污染”。 -
我在我的 WSL 上进行了尝试,但我没有使用编辑器,而是在
nano中编写了slack.sh,我看到了值。我猜@chepner 关于 CR/LF 结尾是正确的,这可能是根本原因。另外,如果您想使用此变量,最好将其放在~/.bashrc文件中,如果您下次需要访问它。 -
@Shan-Desai 在
.bash_profile中定义环境变量once是比较常见的,基于启动一个其他交互shell继承的登录shell的常见用法他们的环境。
标签: linux bash sh windows-subsystem-for-linux