kal*_*gne 4 export environment-variables bash-scripting
我有一个 bash 文件,src-useful.bash
包含有用的函数,例如say_hello()
,位于 /path/to/useful 中。
在我的中~/.bash_profile
我添加了以下几行:
export BASH_USEFUL=/path/to/useful
source $BASH_USEFUL/src-useful.bash
Run Code Online (Sandbox Code Playgroud)
打开新终端我可以检查以下内容:
$ echo $BASH_USEFUL
/path/to/useful
$ cat $BASH_USEFUL/src-useful.bash
function hello() {
echo "hello!"
}
$ hello
hello!
Run Code Online (Sandbox Code Playgroud)
我创建了一个脚本say_hello.sh
:
$ cat say_hello.sh
echo "BASH_USEFUL: $BASH_USEFUL"
hello
$ ./say_hello.sh
BASH_USEFUL: /path/to/useful # Recognizsed
say_hello.sh: line 2: say_hello: command not found # Not recognized?
Run Code Online (Sandbox Code Playgroud)
如果我来源$BASH_USEFUL/src-useful.bash
它say_hello.sh
会工作但是:
$ cat say_hello.sh
echo "BASH_USEFUL: $BASH_USEFUL"
source $BASH_USEFUL/src-useful
say_hello
$ ./say_hello.sh
BASH_USEFUL: /path/to/useful # Recognized
hello! # Function say_hello is now recognized
Run Code Online (Sandbox Code Playgroud)
我想知道为什么BASH_USEFUL
我的脚本仍然可以识别该变量,而我的源文件中的函数却无法在运行的脚本的环境中看到。除了src-useful.bash
在我的脚本中获取我的资源之外,还有其他解决方法吗?我希望src-useful.bash
在我启动的任何脚本的环境中加载 的函数。
小智 6
仅导出的环境项目会复制到新的子环境。您已导出BASH_USEFUL
,因此此环境变量会./say_hello.sh
按预期复制到您的子进程。但是您没有对您的函数执行相同的操作,hello()
该函数是一个简单的本地符号,不会在新的子环境中复制。
使用 bash 导出函数的语法使用-f
以下参数export
:
export -f hello
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2561 次 |
最近记录: |