首页 > 解决方案 > 如何在 linux 中从后台取消设置环境变量?

问题描述

我想从后台进程中删除一个稍微休眠的环境变量。我将“asd”变量设置为“foo”

export asd=foo

之后我想从后台进程中删除。我试试这个,但不起作用:

(sleep 3;unset asd;) &

3 秒后,“导出”命令仍显示之前的设置。我错了什么?

我的目标是在 3 秒后删除“asd”变量。

标签: linuxbash

解决方案


如何在 linux 中从后台取消设置环境变量?

您可以在父进程中设置陷阱并在陷阱内取消设置,同时将后台进程设置为在指定时间后传递信号。

asd=foo
trap 'unset asd' SIGUSR1
p=$BASHPID
( sleep 1; kill -SIGUSR1 $p ) &
echo $asd  # will print foo
sleep 2
echo $asd  # will print empty line

请注意,它不会在指定时间之后“完全”取消设置变量,而是在执行信号处理程序时。

我想或者我可以想象 patchin bash 并编写一个 bash 内置命令,该命令将创建一个线程,该线程在指定时间后将取消设置变量。请注意,这setenv不是线程安全的,因此此类设置必须与其他 bash 代码同步。

我错了什么?

您确实在子外壳中取消了变量设置。子shell 环境不影响父shell。


推荐阅读