我想写一个脚本来自动完成我做的重复性任务。
我发出这个命令:
heroku pgbackups:capture --expire
我得到了这个回复
MY_DB_URL(DATABASE_URL)----备份---> b677
然后我用捕获号码(上面的b677)发出此命令
curl -o latest.dump `heroku pgbackups:url b677`
如何解析文本并将值放入下一个命令?
答案 0 :(得分:1)
只需要解析第一个命令的输出并将其保存到变量中:
capnum=$(heroku pgbackups:capture --expire | grep -- "--->" | awk '{print $NF}')
然后执行,
curl -o latest.dump $(heroku pgbackups:url ${capnum})
或者,您可以说:
curl -o latest.dump $(heroku pgbackups:url $(heroku pgbackups:capture --expire | grep -- "--->" | awk '{print $NF}'))
答案 1 :(得分:1)
更多方式:
read __ __ __ URL < <(exec heroku pgbackups:capture --expire)
curl -o latest.dump "$URL"
curl -o latest.dump $(exec heroku pgbackups:capture --expire | cut -f 4 -d ' ')
curl -o latest.dump $(exec heroku pgbackups:capture --expire | sed 's|.* ||')
答案 2 :(得分:0)
好吧,如果捕获号码的格式总是相同,你可以使用
captureNumber=`heroku pgbackups:capture --expire | grep -o [a-Z][0-9]*$`
curl -o latest.dump `heroku pgbackups:url ${captureNumber}`
或者,或许更一般地,检测最后一个空格并使用该行的其余部分:
captureNumber=`heroku pgbackups:capture --expire | grep -o \s.*$`
如果我不知道有不同的格式,请调整正则表达式,如果正则表达式没有很好地捕获格式,请使用devnull的答案。
答案 3 :(得分:0)
使用sed和shell脚本可行。
#!/bin/sh
s=`heroku pgbackups:capture --expire`
id=`echo ${s} | sed -e "s/^.*> \(b[0-9]*\)$/\1/"`
url=`echo heroku pgbackups:url ${id}`
curl -o last.dump "${url}"
这不是最漂亮的shell脚本,但它可以作为概念的证明。