为什么lsf命令bjobs不能在linux shell中正确执行

Why lsf command bjobs can not be executed correctly in linux shell

在我的项目中,我写了一个linux shell 脚本。我想在 lsf 中区分 jobs 是否为 运行 的节点。 LSF 是 IBM 产品。

我有一个文件Date.log,内容是这样的:

 133462 bio-yuym 5*r01n42
 141588 eee-leisq 40*r10n43
 142885 phy-zhangy 40*r13n40
 142907 phy-zhangy 40*r13n31
 143545 bio-zouxd r01n07
 143962 phy-xiaoxl 40*r08n38
 143971 eee-leisq 40*r08n53
 144009 phy-muhm 40*r11n51

我的linuxshell脚本代码是:

cat Date.log | while read LINE     
do
  jobID=`echo $LINE | awk '{print }'`
  jobInfo=`bjobs $jobID `

  if [[ $jobInfo =~ "not\ found" ]]
  then
     echo $LINE >> "$Date"-lsffin.log
  else
     echo $LINE >> "$Date"-lsfrun.log
 fi
done

正确结果应该是两个文件,"$Date"-lsfrun.log的内容应该是:

143545 bio-zouxd r01n07
143962 phy-xiaoxl 40*r08n38

但很不幸,我的屏幕上出现了消息:

Job <143545> is not found
Job <143962> is not found

并且"$Date".lsfrun.log里面是空白的。所有内容都在"$Date"-lsfrun.log.

为什么 lsf 命令 bjob​​s 在 linux shell 中无法正确执行?

尽管捕获了程序的标准输出,但您仍能在屏幕上看到输出这一事实表明 bjobs 正在将这些错误消息写入其标准错误流,而不是其标准输出流。那将是完全传统的。

如果你想同时捕获标准输出和标准错误,那么你必须将后者重定向到前者:

jobInfo=`bjobs $jobID 2>&1`