如何通过TCL命令将环境变量设置到Xterm中?
问题解决:通过TCL将环境变量传递到Xterm
为什么当前操作无效?
进程的环境变量遵循单向继承机制:Xterm是父进程,tclsh是它启动的子进程。子进程只能修改自己的环境变量空间,无法反向修改父进程的环境变量,所以退出tclsh后,Xterm里看不到MYVAR。
可行的解决方案
方案1:让TCL输出环境变量设置命令,在Xterm中执行
在tclsh会话中输出shell的环境变量设置命令:
puts "export MYVAR=XXXX"
退出tclsh后,将输出的命令直接执行,或者用一行命令完成:
eval $(tclsh -c 'puts "export MYVAR=XXXX"')
执行后用env | grep MYVAR就能看到变量了。
方案2:用TCL启动新的Xterm并传递变量
如果需要的是新Xterm窗口带有该环境变量,可以在tclsh中设置变量后直接启动xterm:
set ::env(MYVAR) "XXXX" exec xterm &
新启动的Xterm会继承tclsh的环境变量,自然包含MYVAR。
方案3:将变量写入shell配置文件(永久生效)
如果希望当前Xterm及后续打开的终端都能使用该变量,可以让TCL把设置命令写入shell的配置文件(比如bash用~/.bashrc,zsh用~/.zshrc):
set config_file "~/.bashrc" set fh [open $config_file a] puts $fh "export MYVAR=XXXX" close $fh
然后在Xterm中执行以下命令让配置生效:
source ~/.bashrc
内容的提问来源于stack exchange,提问作者cyl cyl
相关产品推荐
相关产品推荐

