git clone
の出力を使用してファイルに書き込みたい
git clone https://github.com/someRepository > git_clone.file
しかし、代わりに、次のように端末で出力を表示/更新します
Cloning to 'someRepository' ...
remote: Counting objects: 2618, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 2618 (delta 2), reused 12 (delta 1), pack-reused 2603
Received objects: 100% (2618/2618), 258.95 MiB | 4.39 MiB/s, Done.
Resolving Differences auf: 100% (1058/1058), Done.
Check Connectivity ... Done.
ただし、ファイルgit_clone.file
は生成されますが、空のままです。
私の当初の目標は、git
の出力を関数にバイパスすることでした( 私の質問 を参照)。しかし、今では、git
はstdout
への出力を生成することすらしないように見えますが、ファイルに何も書き込まれないため、どういうわけか異なっています。
ファイル/関数にリダイレクトするために、git
からこの表示された出力を取得するにはどうすればよいですか?
編集
提案されたstderr
(およびstdout
)のリダイレクトでは、問題は解決しませんでした。
git clone https://github.com/someRepository 2> git_clone.file
git clone https://github.com/someRepository &> git_clone.file
git clone https://github.com/someRepository > git_clone.file > 2>&1
すべて私に同じ結果を与えました:行のみ
Cloning to 'someRepository' ...
git_clone.file
に表示されます
背景情報
なぜこれが必要なのですか?
他の質問はこちら で説明したように、スクリプトの出力の最後に常にカスタムプログレスバーを作成しました。 (マルチブルスクリプトで使用しますが) script は、この場合多くの(現在107まで)gitリポジトリをgithubから独自のGitlab-Serverに移行し、通常失われるGit LFSサポートを修復しますそれなしで。
したがって、gitのすべての出力を引き続き表示したいのですが、ターミナルの出力の下部で進行状況バーを機能させたいと思います。
ご協力いただきありがとうございます!
私はちょうど解決策を見つけました:
( デザートの答え に感謝)git
設計により、stdout
には書き込みませんが、stderr
には書き込みません。したがって、出力を取得するには、stderr
もリダイレクトする必要がありました。
git clone XYZ &> git_clone.file
とにかくこれは十分ではなく、ファイルへの出力の「面白くない」部分だけを受け取りましたが、本当に欲しかった進行状況の行は受け取りませんでした。
man git-clone
でさらに再調査を行うと、オプションが存在することに気付きました
--progress
progress status is reported on the standard error stream by
default when it is attached to a terminal, unless -q is
specified. This flag forces progress status even if the standard
error stream is not directed to a terminal.
実際には既に端末に接続されていると思いますが、これはgitに最終的に最も関心のある進行状況の行をstderr
に書き込むように強制するようです。
git clone --progress XYZ &> git_clone.file
git clone
は出力にstderr
を使用するため、ファイルにthatを書き込むだけです。
git clone https://github.com/someRepository 2>git_clone.file
または、stdout
とstderr
の両方をリダイレクトすることもできます。これは特に必要ありませんが、この方法では、コマンドによって生成されるevery出力がリダイレクトされることを確認します。
git clone https://github.com/someRepository &>git_clone.file
git clone
の場合、リダイレクトすると明らかに異なる出力があります。ターミナルで実行される進行情報全体は、出力ファイルに含まれません。これは設計上であり、IIRCはその動作を直接簡単に変更することはできません。しかし別のスクリプトで出力が必要な場合は、非常にうまくpipeそれはうまくいき、すべての出力が得られます:
git clone https://github.com/someRepository | cat
スクリプト内で、-
でstdin
を取得できます。 cat -
からstdin
からstdout
–詳細についてはこちらを参照してください。 ファイルまたはstdinからの入力を受け入れるスクリプトを記述する方法 および Bashのファイルまたはstdinから読み取る方法 。