我正在尝试制作一个bash-shell脚本,用于在排队系统上启动一些作业。启动作业后,launch命令会将作业id打印到stdout,我想"trap"它,然后在下一个命令中使用。作业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
文件,然后通过使用regex过滤器对该文件进行grepping来生成变量。。。类似于:
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输出中删除空格?
调用脚本时可以使用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
这样的东西应该可以工作:
$ JOBID=`./some_function | sed 's/[^0-9]*([0-9]*)[^0-9]*/1/'`
$ echo $JOBID
1234