如何从Tcl脚本运行含bsub命令的csh脚本时出现bsub未找到错误
报错核心原因
「bsub: Command not found」是环境变量加载差异导致的,和Tcl、csh的基础执行逻辑无关:
- 交互登录csh时,shell会自动加载
~/.cshrc、/etc/csh.cshrc等初始化配置,把提供bsub命令的集群调度工具LSF的安装路径写入PATH变量,因此可以直接调用bsub。 - 从Tcl脚本通过
exec /bin/csh aim.csh拉起csh进程时,默认启动的是非交互、非登录模式的csh,不会自动加载上述初始化配置,读不到PATH中存储的bsub路径,就会触发命令找不到的报错。 - 原有脚本存在路径书写疏漏:写的
/bin/csh/多了末尾斜杠,在部分文件系统下会被识别为目录而非可执行文件,也可能引发执行异常。
可落地的解决方法
- 给csh调用加登录模式参数:把原有exec行修改为
exec /bin/csh -l aim.csh >@stdout 2>@stderr
其中-l参数会让csh以登录shell模式启动,自动加载所有登录阶段的环境配置,正确识别bsub路径。 - 在aim.csh内手动加载LSF环境:在aim.csh的开头部分加上LSF自带的环境初始化脚本的source命令,比如:
这种方式不依赖shell启动模式,不管脚本被什么方式调用都能正常读取bsub路径。# 替换为实际环境中LSF配置文件的真实路径 source /lsf_install_path/conf/profile.csh - 兜底使用绝对路径调用:在可正常运行bsub的交互环境里执行
which bsub查到命令的全路径,直接替换aim.csh里的bsub命令,比如:
这种方式完全不依赖PATH环境变量,稳定性最高。/opt/lsf/bin/bsub -q normal -db <path>
内容的提问来源于stack exchange,提问作者Indu Chaudhary
相关产品推荐
相关产品推荐

