0

我正在尝试编写的 shellscript 是

  1. 下载一个 tarball 和 stdouttar来解压它
  2. 同时解析在stderr找到的http头
  3. 将#2 处的解析结果设置为变量。

对于#1:

$ wget -Sq -O- "https://api.github.com/repos/est/est/tarball/master" | tar -zmxf -

我启用了-S显示服务器对 stderr 的响应的选项,我想稍微解析一下字符串 commit hash 的标头,并将其设置为一个名为$rev

$ rev=$(wget -Sq -O /dev/null "https://api.github.com/repos/est/est/tarball/master" 2>&1 | grep "Content-Disposition:" | tail -1 | awk 'match($0, /filename=.+\-([a-zA-Z0-9]+)\./, f){ print f[1] }')
$ echo $rev
dacd56e

所以基本上,我想要一个可以

  1. 管道标准输出到一个命令,也管道标准错误到另一个命令
  2. 解析标准错误并将输出设置为变量
  3. 不要创建临时文件

对于#1 https://stackoverflow.com/a/9217228/41948

对于#2,我发现答案read命令,但不幸的是,该变量只能在子 shell 中找到。

那么如何将在read命令子shell 中找到的变量传递给父shell?

或者我该如何编写这样的shellscript?

4

1 回答 1

1

该死的,我必须反复试验才能自己找到丑陋的答案

rev=$(wget -Sq -O- $url 2> >( 
    grep "Content-Disposition:" | 
    tail -1 | 
    awk 'match($0, /filename=.+\-([a-zA-Z0-9]+)\./, f){ print f[1] }'
    ) > >(
    tar -C $www_dir --strip=1 -zmxf -
    ))
于 2013-03-01T02:50:09.620 回答