2017-07-03 10 views
0

私はいくつかの素敵なコマンドラインスクリプトを使って作業を自動化しようとしています。GIT for Windows bashで 'xargs'を使用する

cd $1 

if [ -z ${JENKINS_CREDENTIALS+x} -o -z ${JENKINS_SERVER+x} ] 
    then 
    JENKINS_SERVER=$(<jenkins_url.txt) 
    JENKINS_CREDENTIALS=$(<credentials.txt) 
fi 

java -jar jenkins-cli.jar -s $JENKINS_SERVER -auth $JENKINS_CREDENTIALS ${@:2} 

これは正常に動作します:私はジェンキンスサーバーと通信しているが、このようになります1つのスクリプト(jenkins_cli.sh)を持っています。

例えば、私が./jenkins_cli.sh localhost/ list-jobsと呼んだ場合、私のローカルJenkinsサーバーで現在実行中のジョブのリストが表示されます。しかし、私はより多くの空想(例えば何かをしようとした場合:./jenkins_cli.sh localhost/ list-jobs | xargs -L1 ./jenkins-cli localhost/ delete-jobを私は次のエラーを取得:。。。'RROR: No such job 'test_jobを仕事test_jobが存在して仕事'test_jobはどのようにこの文字が'私のコマンドで終わるん存在しないのですか?

これは、GITに付属しているWindows用のbashや、改行を扱う方法、スクリプトなどのパラメータをどのように扱うのかと関係していると思います。./jenkins_cli.sh localhost/ list-jobs | xargs -L1 echo私は引用符なしで期待される結果を得る...私は本当にこれをさらにデバッグする方法を知りません。私はちょうどファイルにジョブリストを書いて、各行を読んで、私はこの問題の解決策を持っています私のカスタムスクリプトのトンが、私は本当に私は問題があなたのjenkinsコマンドの出力は、出力のDOSの行末スタイル(\r\n)を使用していることだと思いxargs :)

+0

私は言及を忘れてしまった: – tim

答えて

2

でそれを実装したいのですが、 gitシェルコマンドは、古典的なUNIXエンドスタイルライン(\n)を期待しています。

問題は、xargsは、行末に特殊文字として迷惑メールがあり、エスケープしようとしていることです。しかし、すべてがうまくいっても、次のコマンドの引数はtest_jobではなく、test_job\rです(\rは見えないかもしれません)。

は簡単な解決策はdos2unixを使用することです:

java -jar jenkins-cli.jar -s $JENKINS_SERVER -auth $JENKINS_CREDENTIALS ${@:2} | dos2unix 
+0

はどうもありがとうございまし意図したとおり、それはジョブを削除しないtest_job'私は './jenkins_cli localhost /を削除するジョブを使用する場合: ) – tim

+2

'\ r'は完全には見えないわけではありません。それは"カーソル "を行の先頭に戻します。これは 'ERROR'ではなく' RROR'を見る理由です: '' 'の前に' \ r'があり、行頭で終わります。 – Thomas

関連する問題