我有一个简单的 bash 脚本:
#!/bin/bash
export MONGOMS_DOWNLOAD_URL="https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.8.tgz"
export MONGOMS_VERSION="4.2.8"
但是当我运行这个'./preinstall.sh'然后echo $MONGOMS_VERSION
var没有设置。
如果我直接在终端中导出这些变量,则没有问题。
https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell#answer-496777 根据这篇文章,shell脚本具有只读访问权限父级和任何 vars 集都将丢失。
有没有解决的办法?
利用:
或为了更好的便携性:
见:。(源或点运算符)
您需要来源
./preinstall.sh
. 有两种方法可以做到这一点:或者
Bash 一样,
ksh
并且zsh
支持.
和source
。它在当前 shell 中读取并执行指定文件的内容,而不是在新进程中。使用
bash
外壳:POSIX 指定了 dot(
.
) 特殊内置函数,但对 . 保持沉默source
。从标准:为了获得最大的 shell 脚本可移植性,您应该只使用不带参数的 dot 命令。
顺便说一句,如果您从位置可能发生变化的脚本中采购,我建议您使用绝对路径而不是相对路径。