2

我在使用 bash 脚本时遇到问题。基本上,在我的脚本中我运行命令

bjobs -u $1

$1 是脚本参数,它是我集群上用户的 ID。如果用户 $1 在集群上没有正在运行/挂起的作业,则 bjob​​s 打印

 No unfinished jobs found

到标准输出。此外,退出状态为 255。如果用户 $1 确实有作业,则 bjob​​s 打印:

JOBID   USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
45823   .......
45824   .......
.
.

退出状态为 0。我希望 awk 解析 bjob​​s 的输出。我试过了

bjobs -u $1 | awk '...'

其中 '...' 是我的 awk 解析程序。这不太好用,因为显然当用户 $1 没有运行/挂起的作业时,字符串“No unfinished jobs found”不会传递给 awk。同样的情况发生在

bjobs -u $1 > foo
awk '...' foo 

有什么建议么?

4

2 回答 2

6

也许该消息(我猜是某种错误)将出现在 STDERR 而不是 STDOUT 中。

您可以使用 > 将 bash 中的 IO 流重定向到文件描述符,而 2 是 STDERR。

尝试:

bjobs -u $1 2>&1 | awk '...'

看看这是否能解决你的问题。2>&1 部分意味着将 STDERR (2) 重定向到 STDOUT (1),而 STDOUT 是通过管道传输到 awk 的。

更多信息:http ://www.tldp.org/LDP/abs/html/io-redirection.html

于 2012-10-17T13:43:27.927 回答
1

bjobs 可能会向 stderr 打印“未找到未完成的作业”。

添加 2>&1 将标准错误传送到标准输出。

有关 bash IO 重定向的更多信息

于 2012-10-17T13:39:34.253 回答