首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从从tcl脚本<- (modulefile脚本)运行的bashscript中检索输出

如何从从tcl脚本<- (modulefile脚本)运行的bashscript中检索输出
EN

Stack Overflow用户
提问于 2016-08-20 21:55:59
回答 2查看 152关注 0票数 0

在我的主目录中,我有子目录(CentOS、Ubuntu等),所有这些都是我可以访问的特定节点的子目录。

  • 每个操作系统都有自己的程序副本,其中一个是Python: $HOME/{CentOS,Ubuntu,.}/{python2,python3}
  • 我使用环境模块,以便当我将ssh放入另一台计算机(COMP)时,将为该特定计算机(COMP)设置Python别名。例如:
代码语言:javascript
复制
1. COMP1 is CentOS

当我进入COMP1时,"python3“应该指向$HOME/Centos/python3/bin/python3

2. COMP2是Ubuntu

当I ssh I COMP2时,"python2“应该指向$HOME/Ubuntu/python2/bin/python2

我可以使用lsb_release -si在bash中检索OS名称,但我正在处理用tcl编写的模块文件,而且还没有找到类似于lsb_release的东西。我能有一个bash脚本,当从tcl脚本调用时输出lsb_release -si吗?

  • 我试过这样做,但没有运气: BASH脚本: #!/bin/bash OS=$(lsb_release -si) echo $OS

MODULEFILE脚本:

代码语言:javascript
复制
#%Modulefile1.0

set OS [catch {exec bash /path/to/bash_file} output]
puts $OS

这没什么用。

EN

回答 2

Stack Overflow用户

发布于 2016-08-21 08:02:19

选项A:在bash中导出变量,并在tcl中访问环境变量。

代码语言:javascript
复制
#!/bin/bash
OS=$(lsb_release -si)
export OS
somescript.tcl

#!/usr/bin/tclsh
puts $::env(OS)

选项B:使用tcl附带的平台包。

代码语言:javascript
复制
#!/usr/bin/tclsh
package require platform
puts [platform::identify] ; # detailed OS-CPU
puts [platform::generic] ; # more generic OS-CPU

参考资料:环境 平台

票数 0
EN

Stack Overflow用户

发布于 2016-08-21 08:05:13

您的代码基本上没有明显错误。

但是在[catch {exec ...} output]之后,您要寻找的值应该在output变量中;OS变量将有一个代码,有效地指示bash脚本是否向stderr生成任何输出。由于您对可能由于不容易控制的原因而产生的调试输出不感兴趣,所以您可能可以这样做:

代码语言:javascript
复制
catch {exec bash /path/to/bash_file 2>/dev/null} output
puts $output

还要确保bash脚本在末尾有一个显式的exit。最好确保它能正确停止。这是默认行为,但最好在这里明确,因为这是一个(小)程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39059024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档