linux - 如何在 linux 中从后台取消设置环境变量?
问题描述
我想从后台进程中删除一个稍微休眠的环境变量。我将“asd”变量设置为“foo”
export asd=foo
之后我想从后台进程中删除。我试试这个,但不起作用:
(sleep 3;unset asd;) &
3 秒后,“导出”命令仍显示之前的设置。我错了什么?
我的目标是在 3 秒后删除“asd”变量。
解决方案
如何在 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。
推荐阅读
- java - 带有 MD5 哈希的 Spring Security OAuth2 令牌仍然安全吗?
- math - (Lua) 导入/需要数学模块不起作用
- python - How can I count holes on Lego bricks using opencv python?
- ios - 试图给 UIButton 一个特殊的属性
- linux - 为什么当我的 shell 使用该目录时可以删除该目录?
- python - 如何使用 Google Colab 本地运行时并连接到 Google Drive
- c++ - C++ 中的 Javascript 样式闭包
- php - PHP Preg_Match 字母数字、特殊字符和空格 - textarea 字段
- javascript - 关于使用 Node.js“代理”服务器代理 CSS 和 JS 的建议
- cmake - 说服 CPack 在 /usr/share 下正确安装共享只读数据