2016-05-25 67 views
1

私はgitクローンがあるシーケンシャルスクリプトを持っています。私は実際のgitプロセスが次のステップを実行する前に終了していることを確認したいと思います。 私は"git clone"がbashで終了するのを待ちます

git clone https://github.example.com/Sample/Example.git & export PID=${!} | while [[ (-d /proc/$PID) && (-z `grep zombie /proc/$PID/status`) ]]; do sleep 1; done 

や他のさまざまな方法を試してみましたが、実際のgitのクローンが行われるまで待機する方法を管理できませんでした。この1つのヒントはどうですか?

+2

わかりません。クローンが完了するかエラーが発生するまで、 'git clone'は終了しません。 – trojanfoe

+0

です。これは、cronによって呼び出されたスクリプトの一部であり、repoが不完全であるため "git clone"の後のスクリプトのいくつかが失敗します。ちょうど「スリープ30」のようなものがあれば、それらは成功です。しかし、私がしているのは、 "git clone"が本当に終わったかどうかを確認することだけです。 cronによって起動されたときにのみ、コマンドラインから実行したときに問題は発生しません。とにかくネガティブに感謝します。 –

+0

私はあなたにdownvoteしなかった。 – trojanfoe

答えて

1

&記号がgitプロセスをフォークし、バックグラウンドに配置します。続行する前に終了したい場合は、&&または改行で置き換えてください。

+0

"&記号はgitプロセスを掘り起こす" ..何? – hek2mgl

+2

真実は、シェルがフォークしてから、バックグラウンドでexecのgit cloneコマンドです。 – hek2mgl

7

問題は&です。これにより、バックグラウンドで強制的にgitコマンドが実行されます。 ;または&&を使用してコマンドを分けるだけです。

これはどんな場合でも "複製"されます。たとえ "git clone"が失敗したとしても。

git clone https://github.example.com/Sample/Example.git; echo "cloned" 

か:

これは、クローンが成功でいた場合にのみ、 "クローン" エコーされます。

git clone https://github.example.com/Sample/Example.git && echo "cloned" 

あなたの説明から、第2のオプションが必要だと思います。

+1

P.S. 'git clone https://github.example.com/Sample/Example.git && echo" cloned "|| echo "clone failed"は失敗すると "clone failed"をエコーし​​ます。 – ElpieKay

+0

"git clone"コマンドがcronによってスクリプトの一部として呼び出されたときには動作しません。何が起こるかは、 "git clone"が非同期で実行され、結果を待つことがないということです。 –

+0

実際には、 "git-remote-https"と呼ばれるgitによって生成された3つの分離プロセスがあり、それらはコンテンツをダウンロードします。だから問題はもう少し複雑です。 OFCでは、他のgitコマンドが同時に実行されている可能性があります。そのため、ps axuなどは名前だけでチェックしても良い結果を保証しません。 –

関連する問題