在一个tcl shell中,我想用一个变量来存储我在哪个shell中。这个脚本也是为了让其他人运行的,我需要检查他们在哪个shell中。
我尝试使用exec,但我在将结果存储在一个可以与字符串进行比较的变量中时遇到了麻烦,基本上,我想找出用户是在bash、csh还是ksh中。用户在shell之间切换,因此有必要确定他们所在的活动shell。我尝试:
set shell [exec echo \$0]
puts stdout "echo $shell;"
if { [string first "bash" $shell] != -1 } {
puts stdout "echo should be bash, is $shell;"
} elseif { [string first "ksh" $shell] != -1 } {
puts stdout "echo should be KSH, is $shell;"
} else {
puts stdout "echo should be csh, is $shell;"
}
不幸的是,这只会将字符串$0写入shell,而不是实际的shell。有没有其他方法可以做到这一点?对于上下文,这是针对linux上的modulefile,它允许我(和其他人)为特定的软件包设置适当的环境。
模块文件具有
设置shell [模块信息shell]
但这不会产生活性壳。
编辑:
澄清一下,我想知道我在哪个shell中,这样我就可以运行
something.sh if I am in bash
something.ksh if I am in ksh
something.csh if I am in csh
所有这些脚本在用户想要运行的软件能够在给定的shell中运行之前必须做一些稍微不同的事情。2这将在终端中被调用,并且用户想要使用的软件也将在该终端中运行。
谢谢!
2条答案
按热度按时间ux6nzvsh1#
如果你想知道的是SHELL环境变量的值,Tcl提供了一个名为
env
的全局数组,它包含了Tcl shell启动的环境。您将需要处理未定义SHELL的情况,但这是另一个问题。
hc8w905p2#
这里假设tcl进程的父进程是shell,但是避免了$::env(SHELL)的问题: