在我的主目录中,我有子目录(CentOS、Ubuntu 等),所有子目录都用于我有权访问的特定节点。
每个操作系统都会拥有自己的程序副本,其中之一是Python:
$HOME/{CentOS, Ubuntu, ...}/{python2,python3}
我正在使用环境模块,以便当我
ssh
进入另一台计算机(COMP)时,将为该特定计算机(COMP)设置Python别名。例如:
COMP1 是 CentOS
当我
ssh
进入COMP1时,“python3”应该指向$HOME/Centos/python3/bin/python3
COMP2 是 Ubuntu
当我
ssh
进入COMP2时,“python2”应该指向$HOME/Ubuntu/python2/bin/python2
我可以使用
lsb_release -si
在 bash 中检索操作系统名称,但我正在使用用 tcl 编写的模块文件,并且还没有找到类似 lsb_release
的内容。我可以有一个从 tcl 脚本调用时输出 lsb_release -si
的 bash 脚本吗?
我尝试这样做,但没有运气:
BASH 脚本:
#!/bin/bash
OS=$(lsb_release -si)
echo $OS
模块文件脚本:
#%Modulefile1.0
set OS [catch {exec bash /path/to/bash_file} output]
puts $OS
这没什么作用。
您的代码大部分看起来并没有明显错误。
但是在
[catch {exec ...} output]
之后,您要查找的值应该在 output
变量中; OS
变量将有一个代码有效地指示 bash 脚本是否向 stderr 生成任何输出。由于您肯定对调试输出不感兴趣,而调试输出可能是由于您无法轻松控制的原因而产生的,因此您可以这样做:
catch {exec bash /path/to/bash_file 2>/dev/null} output
puts $output
还要确保您的 bash 脚本末尾有明确的
exit
。不妨确保它正确停止。这是 default 行为,但最好在这里明确,因为这是一个(小)程序。