如何从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调用之后执行此操作非常重要;这改变了代码将在哪里查找CCD_ 3。

如果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对于不可移植的代码来说已经足够好了。

最新更新