我正在尝试在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
对于不可移植的代码来说已经足够好了。