私が書こうとしているシェルスクリプトは
- tarball と stdout をダウンロードし
tar
て解凍します - 同時に、stderr で見つかった http ヘッダーを解析します
- #2 の解析結果を変数に設定します。
#1の場合:
$ wget -Sq -O- "https://api.github.com/repos/est/est/tarball/master" | tar -zmxf -
サーバーの応答を stderr に表示するオプションを有効にし-S
ました。文字列 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
基本的に、私はできるシェルスクリプトが欲しい
- stdout をコマンドにパイプし、stderr を別のコマンドにパイプする
- stderr を解析し、出力を変数として設定します
- 一時ファイルを作成しない
#1 https://stackoverflow.com/a/9217228/41948の場合
#2については、答えはread
コマンドであることがわかりましたが、残念ながら変数はサブシェルでしか見つかりません。
read
では、コマンド サブシェルで見つかった変数を親シェルに渡すにはどうすればよいでしょうか。
または、このようなシェルスクリプトをどのように書くのですか?