我正在尝试创建一个bash shell脚本,在队列系统上启动一些作业。启动作业后,启动命令将作业ID打印到stdout,我想“陷阱”然后在下一个命令中使用。 job-id数字是stdout消息中的唯一数字。
#!/bin/bash
./some_function
>>> this is some stdout text and the job number is 1234...
然后我想去:
echo $job_id
>>> 1234
我当前的方法是使用tee命令将原始命令的stdout传递给tmp.txt
文件,然后通过使用正则表达式过滤器来抓取该文件来创建变量...类似于:
echo 'pretend this is some dummy output from a function 1234' 2>&1 | tee tmp.txt
job_id=`cat tmp.txt | grep -o '[0-9]'`
echo $job_id
>>> pretend this is some dummy output from a function 1234
>>> 1 2 3 4
...但我觉得这并不是最优雅或“标准”的做法。有什么更好的方法呢?
对于奖励积分,如何从grep + regex输出中删除空格?
答案 0 :(得分:2)
您可以在调用脚本时使用grep -o
:
jobid=$(echo 'pretend this is some dummy output from a function 1234' 2>&1 |
tee tmp.txt | grep -Eo '[0-9]+$')
echo "$jobid"
1234
答案 1 :(得分:2)
这样的事情应该有效:
$ JOBID=`./some_function | sed 's/[^0-9]*\([0-9]*\)[^0-9]*/\1/'`
$ echo $JOBID
1234