【问题标题】:Setting console env using a shell script使用 shell 脚本设置控制台环境
【发布时间】:2017-03-06 07:44:21
【问题描述】:

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

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

当我运行它sh setmyenv.sh 时,我可以看到 PATH 环境已相应设置。

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 variableHow to set global environment variables using shell script .sh 的回答

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    当你跑步时

    sh setmyenv.sh
    

    它在单独的sh 进程中运行,并且在进程完成后对 PATH 的更改将丢失。

    您需要获取脚本的来源:

    source setmyenv.sh
    

    . setmyenv.sh
    

    以便它在您当前的 shell 中运行并保留所有变量分配。记住不要在setmyenv.sh 脚本中包含任何exit。如果你这样做了,获取脚本将终止你的 shell。


    另见:

    【讨论】:

    • 当您运行 sh setmyenv.sh 时,它会在单独的 shell 进程中运行 - 这与子 shell 不同。子shell 具有特定的属性,例如局部变量可以在子shell 中读取——它们不必被导出。通常使用括号创建子shell,例如( commands )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2015-03-02
    • 2013-02-06
    相关资源
    最近更新 更多