我想编写一个脚本来自动化我所做的重复性任务。
我发出这个命令:
heroku pgbackups:capture --expire
我得到了这个回应
MY_DB_URL (DATABASE_URL) ----备份---> b677
然后我发出这个带有捕获号的命令(上面的 b677)
curl -o latest.dump `heroku pgbackups:url b677`
如何解析文本并将值放入下一个命令?
更多方式:
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|.* ||')
只需解析第一个命令的输出并将其保存到变量中:
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}'))
它可以使用 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 脚本,但它可以作为概念证明。
好吧,如果捕获号的格式始终相同,则可以使用
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 的答案。