2

我想编写一个脚本来自动化我所做的重复性任务。

我发出这个命令:

heroku pgbackups:capture --expire

我得到了这个回应

MY_DB_URL (DATABASE_URL) ----备份---> b677

然后我发出这个带有捕获号的命令(上面的 b677)

curl -o latest.dump `heroku pgbackups:url b677`

如何解析文本并将值放入下一个命令?

4

4 回答 4

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|.* ||')
于 2013-09-04T11:42:17.767 回答
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}'))
于 2013-09-04T11:35:42.870 回答
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 脚本,但它可以作为概念证明。

于 2013-09-04T11:39:36.807 回答
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 的答案。

于 2013-09-04T11:36:02.933 回答