首页 > 解决方案 > 设置环境变量并稍后检索

问题描述

我想制作一个可执行的 shell 脚本,一旦启动就执行某个操作,如果第二次再次启动,则撤消该操作。我试图定义一个环境变量来确定该操作是否已经执行,但我无法使其工作。

#!/bin/bash
if [ -z ${CUSTOM_VARIABLE} ] 
then
    CUSTOM_VARIABLE=true
    export CUSTOM_VARIABLE 
    # do stuff here
else 
    # undo stuff here
    unset CUSTOM_VARIABLE
fi

这是一个正确的方法吗?如何修复代码

提前致谢

标签: shell

解决方案


注意jdv的评论。

您不能将脚本作为独立执行运行并让它改变父级的环境。调用它x.sh

x.sh

永远不会改变你的环境。另一方面,您可以采购它。

. x.sh

它读取它并在当前范围内执行其内容,这样就可以了。您并没有真正创建一个单独的程序来执行此操作 - 只是存储一个脚本化的命令列表并使用源速记来批量执行它们,可以这么说。

您还可以将其定义为类似结果的函数 -

$: x() {
   if [[ -z "${CUSTOM_VARIABLE}" ]]
   then export CUSTOM_VARIABLE=true
   else unset CUSTOM_VARIABLE
   fi
}

YMMV。

祝你好运。


推荐阅读