我正在尝试在TCL脚本执行期间获取some.cshrc。我没有得到任何错误,但some.cshrc中设置的变量不会传递回shell。
当写它像:source 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子shell,因此不会发生Csh脚本中的任何变量替换。