如何从tcl脚本运行csh脚本,csh脚本包含bsub命令?
我正在尝试在tcl脚本中运行csh脚本。csh脚本中包含bsub命令。当我试图运行脚本时,它会出错,说bsub:Command-notfound 文字样本:如何从tcl脚本运行csh脚本,csh脚本包含bsub命令?,tcl,csh,Tcl,Csh,我正在尝试在tcl脚本中运行csh脚本。csh脚本中包含bsub命令。当我试图运行脚本时,它会出错,说bsub:Command-notfound 文字样本: exec cp -r x ../ cd ../../my_area exec cp -r y ../../ cd ../../my_scripts
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>
setenv IDC$d
setenv LGH$f
设置错误$e
bsub-q正常值-db
调用脚本的正确方法如下:
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/某处/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
对于不可移植的代码来说已经足够了。除了不必要的重定向之外,exec/bin/csh/aim.csh
应该可以,只要aim.csh在您的工作目录中。未找到命令表示bsub
不在您的路径中(或者说,在csh中,不在您的路径中)。