如何从tcl脚本运行csh脚本,csh脚本包含bsub命令?

如何从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

我正在尝试在tcl脚本中运行csh脚本。csh脚本中包含bsub命令。当我试图运行脚本时,它会出错,说bsub:Command-notfound

文字样本:

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中,不在您的
路径中)。