Shell 设置环境变量并在以后检索

Shell 设置环境变量并在以后检索,shell,Shell,我想让一个一旦启动的可执行shell脚本执行某个操作,如果在第二次启动时再次启动,则撤消该操作。我试图定义一个环境变量来确定操作是否已经执行,但我无法使它工作 #!/bin/bash if [ -z ${CUSTOM_VARIABLE} ] then CUSTOM_VARIABLE=true export CUSTOM_VARIABLE # do stuff here else # undo stuff here unset CUSTOM_VARIA

我想让一个一旦启动的可执行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
这是正确的方法吗?如何修复代码

提前感谢您的评论

您不能将脚本作为独立执行运行,并让它更改父级的环境。称之为
x.sh

x.sh
永远不会改变你的环境。另一方面,你可以找到它的来源

它读取它并在当前范围内执行它的内容,这样就可以工作了。实际上,您并不是在创建一个单独的程序来执行此操作,而是存储一个脚本化的命令列表,并使用源代码速记来批量执行这些命令

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

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


祝您好运。

此脚本正在启动的子shell中设置自定义_变量,以便运行脚本。一旦子shell退出并返回您在子shell中设置的变量,子shell就不在父shell的环境中。这是shell编码的一个相当大的部分,所以我建议您进一步讨论:这就是文件系统的用途。
$: x() {
   if [[ -z "${CUSTOM_VARIABLE}" ]]
   then export CUSTOM_VARIABLE=true
   else unset CUSTOM_VARIABLE
   fi
}