実行しましたが、git -C /another-directory pull
次のエラーが発生しました。
構成は
リモートで「refs/heads/main」参照とマージを指定しましたが、その参照を取得できませんでした。
それでは、変数から対応する応答を取得したいと思います。
私試験を終えた read Result < <(git -C /another-directory pull)
それから走ったところ空でしたecho $Result
。
私も試してみましたが、git -C /another-directory pull | read Result
まだ空でした。
どうですか?
ベストアンサー1
これは標準出力ではなく標準エラーの出力です。
stdout と stderr をキャプチャするには:
Result=$(git ... 2>&1)
stderrだけをキャプチャしてstdoutを削除するには、次の手順を実行します。
Result=$(git ... 2>&1 > /dev/null)
stderrだけをキャプチャし、stdoutは保持します。
{ Result=$(git ... 2>&1 >&3 3>&-); } 3>&1
read
命令です言葉を読む~から一つ論理行(物理行は末尾のバックスラッシュで続行できます)
1行を変数として読み取るには、あなたは使うIFS= read -r line
。
したがって、標準エラーの最初の行を読み取るには、git
次のようにします。
IFS= read -r Result < <(git ... 2>&1 > /dev/null)
しかし、ここにはいくつかの欠点があります。
- 終了ステータスが失われます
git
。成功するとread
、つまり、コマンドが行全体を正常に読み取ると、コマンドは成功します。 read
最初の行以降は読み取りを停止して終了するため、git
stderrは壊れたパイプになり、より多くのエラーを印刷すると最終的に終了する可能性があります。
git
stderrパイプを破壊せずに終了状態を維持しながら最初の行のみを取得するには、次のようにします。
Result=$(
set -o pipefail
git ... 2>&1 > /dev/null | sed '1!d'
)
変数の内容を印刷する構文printf '%s\n' "$var
ではありません。echo $var
typeset -p var
定義を印刷するには、Kornに似たシェルを参照してください。