変数からgit pullコマンドの出力をキャプチャできません。

変数からgit pullコマンドの出力をキャプチャできません。

実行しましたが、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最初の行以降は読み取りを停止して終了するため、gitstderrは壊れたパイプになり、より多くのエラーを印刷すると最終的に終了する可能性があります。

gitstderrパイプを破壊せずに終了状態を維持しながら最初の行のみを取得するには、次のようにします。

Result=$(
  set -o pipefail
  git ... 2>&1 > /dev/null | sed '1!d'
)

変数の内容を印刷する構文printf '%s\n' "$varではありませんecho $vartypeset -p var定義を印刷するには、Kornに似たシェルを参照してください。

おすすめ記事