有没有办法在tcl脚本中获取csh文件并将变量带到主shell?

时间:2019-04-29 13:13:49

标签: tcl csh tcsh

我正在尝试在TCL脚本执行期间提供some.cshrc。 我没有收到任何错误,但是some.cshrc中设置的变量没有传递回外壳。

像这样写时: 获取some.cshrc 我遇到错误了。 然后我尝试了: exec / bin / csh -c“来源some.cshrc”

请告知

1 个答案:

答案 0 :(得分:1)

由于Csh和Tcl是两种完全不同的语言,因此您不能简单地通过source命令在Tcl脚本中加载Csh文件。

您可以考虑解决方法。让我们假设您要加载使用setenv命令设置的所有变量。 some.cshrc文件的示例内容可能如下所示:

setenv EDITOR vim
setenv TIME_STYLE long-iso
setenv TZ /usr/share/zoneinfo/Europe/Warsaw

您可以编写一个Tcl脚本来逐行读取此文件并搜索setenv命令。然后,您可以将行重新解释为列表,并通过upvar命令在全局名称空间中设置适当的变量。

#!/usr/bin/tclsh

proc load_cshrc {file_name} {
  set f [open $file_name r]
  while {[gets $f l] >= 0} {
    if {[llength $l] == 3 && [lindex $l 0] eq "setenv"} {
      upvar [lindex $l 1] [lindex $l 1]
      set [lindex $l 1] [lindex $l 2]
    }
  }
  close $f
}

load_cshrc "some.cshrc"
puts "EDITOR = $EDITOR"
puts "TIME_STYLE = $TIME_STYLE"
puts "TZ = $TZ"

请注意,由于我们不运行Csh子shell,因此Csh脚本中的任何变量替换都不会发生。