有没有一种方法可以在 tcl 脚本中获取 csh 文件并将变量引入主 shell?

Is there is a way of sourcing csh file in tcl script and bringing variables to the main shell?

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

写的时候是这样的: 来源some.cshrc 我收到一个错误。 然后我尝试了: exec /bin/csh -c "source some.cshrc"

请指教

由于 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 子外壳,因此 Csh 脚本中的任何变量替换都不会发生。