【问题标题】:Why lsf command bjobs can not be executed correctly in linux shell为什么 lsf 命令 bjob​​s 不能在 linux shell 中正确执行
【发布时间】:2019-12-31 13:14:27
【问题描述】:

在我的项目中,我编写了一个 linux shell 脚本。我想区分节点作业是否在 lsf 中运行。 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

我的 linux shell 脚本代码是:

cat Date.log | while read LINE     
do
  jobID=`echo $LINE | awk '{print $1}'`
  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 中正确执行?

【问题讨论】:

    标签: linux shell lsf


    【解决方案1】:

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

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

    jobInfo=`bjobs $jobID 2>&1`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多