使一个包含stdout中所有数字的变量直接在它之前运行



我正在尝试制作一个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

相关内容

  • 没有找到相关文章

最新更新