在shell脚本中更改父shell的路径变量

3
我想在一个shell脚本中修改路径环境变量。路径变量应该在shell脚本执行后被修改。
2个回答

8

我知道有两种方法可以实现这个功能。第一种是在当前shell的上下文中运行脚本,可以使用以下任意一种方式:

. myscript.sh
source myscript.sh

但这样做存在污染当前shell的风险,会产生各种问题。

我更喜欢一种信息泄漏最小的解决方案。这意味着仍将其作为子shell运行,但在标准输出上输出新路径:

PATH=$(myscript.sh)

这种方法更好,因为路径是唯一受子shell影响的东西,但你必须小心子shell输出了什么。


一个明显的第三种方法是使用"eval",尽管这与执行源代码一样危险。例如,常见的终端设置实用程序"tset"会输出要求调用shell执行的命令。 - Tony Delroy

1

你需要引用你的脚本而不是直接执行它。

. script.sh

或者

source script.sh

在脚本中,只需要导出或设置变量即可。

当脚本被执行时,它会在一个独立的 shell 进程中运行,并且不能轻易地更改父 shell 的变量。

关于此更多信息,请参见:shell 脚本能否设置调用 shell 的环境变量?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接