如何解决如何从 tcl 脚本运行 csh 脚本,csh 脚本包含 bsub 命令?
我正在尝试在 tcl 脚本中运行 csh 脚本。 csh 脚本中包含 bsub 命令。当我尝试运行脚本时,它出错说 bsub: Command not found。
脚本样本:
exec cp -r x ../
cd ../../my_area
exec cp -r y ../../
cd ../../my_scripts
exec /bin/csh/ aim.csh >@stdout 2>@stderr
# also tried set hd aim.csh,exec /bin/csh $hd >@stdout 2>@stderr}
aim.csh 的详细信息
setenv IDC $d
setenv LGH $f
set error $e
bsub -q normal -db <path>
解决方法
调用脚本的正确方法是这样的:
exec /bin/csh aim.csh >@stdout 2>@stderr
您可能希望在运行之前确保 aim.csh
文件存在。在任何 cd
调用之后执行此操作很重要;这会更改代码查找 aim.csh
的位置。
如果您遇到 bsub
不在可执行搜索路径上的问题,那么这既不是 Tcl 的错,也不是 csh 的错。 (我不知道它会在哪里,也不记得是哪个包提供的。)如果需要,您可以从 Tcl 代码扩展可执行搜索路径:
# Before calling exec; after is too late
append env(PATH) :/path/to/directory
例如,如果 bsub
实际上是 /opt/local/somewhere/bin/bsub
,那么您会这样做:
append env(PATH) :/opt/local/somewhere/bin
一个真正正确的方法是使用这个程序:
proc addToPath {directory} {
global env tcl_platform
if {[file type $directory] ne "directory"} {
error "must pass a directory name"
}
append env(PATH) $tcl_platform(pathSeparator) [file nativename $directory]
return
}
addToPath /opt/local/somewhere/bin
但是简单的 append
对于不可移植的代码已经足够了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。