为什么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 命令 bjobs 在 linux shell 中无法正确执行?
尽管捕获了程序的标准输出,但您仍能在屏幕上看到输出这一事实表明 bjobs
正在将这些错误消息写入其标准错误流,而不是其标准输出流。那将是完全传统的。
如果你想同时捕获标准输出和标准错误,那么你必须将后者重定向到前者:
jobInfo=`bjobs $jobID 2>&1`
在我的项目中,我写了一个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 命令 bjobs 在 linux shell 中无法正确执行?
尽管捕获了程序的标准输出,但您仍能在屏幕上看到输出这一事实表明 bjobs
正在将这些错误消息写入其标准错误流,而不是其标准输出流。那将是完全传统的。
如果你想同时捕获标准输出和标准错误,那么你必须将后者重定向到前者:
jobInfo=`bjobs $jobID 2>&1`