linux - 使用 shell 脚本设置控制台环境

标签 linux bash shell

我有一个 shell 脚本 setmyenv.sh 如下

#!/bin/sh
export PATH=./abc/tools:$PATH
env | grep PATH

当我运行它时 sh setmyenv.sh,我可以看到相应地设置了 PATH env。

PATH=./abc/tools:<whatever my existing PATH setting>

但是,在我的命令完成后,如果我手动输入 env | grep PATH 在控制台上,我得到了

PATH=<whatever my existing PATH setting>

我丢失了使用 setmyenv.sh 设置的设置 看起来环境只在我的脚本运行的生命周期内设置。

即使在脚本结束后,我怎么能让环境设置为粘性的。即脚本的目的是设置环境。?

P/S: 我不想在我的 .bash_profileetc\profile 中设置它,因为我只想在需要时设置它,通过调用setmyenv.sh,但不是每次我打开控制台时。即不是根据 Using .sh script to set an environment variable 的答案或 How to set global environment variables using shell script .sh

最佳答案

当你运行时

sh setmyenv.sh

它在一个单独的 sh 进程中运行,当该进程完成时,对 PATH 的更改将丢失。

您需要获取您的脚本:

source setmyenv.sh

. setmyenv.sh

这样它就可以在您当前的 shell 中运行,并且所有变量赋值都将被保留。请记住不要在 setmyenv.sh 脚本中有任何 exit。如果这样做,获取脚本将终止您的 shell。


另见:

关于linux - 使用 shell 脚本设置控制台环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42620104/

相关文章:

bash - 如何在变量中存储标准错误

bash - 为什么我的脚本的输出是 "mv: command not found"而当我直接在 shell 上运行它时却不是?

linux - 使用 xargs 运行多个命令

ruby - Linux-Live-系统公司。带读写分区的 U 盘上的 Ruby 1.9

bash - 使用 bash 脚本将许多 txt 文件转换为 xls 文件

bash - 新 Bash session 的多个初始化文件

bash - Crontab 不执行 bash 脚本

linux - 将变量附加到另一个变量的每一行

linux - crontab 在重新启动时不启动命令

Bash 完成 : compgen a wordlist as if they were paths - Only suggest up until next slash