在GIT for Windows bash中使用'xargs'
我试图用一些很好的命令行脚本自动化我的工作。我有一个脚本(jenkins_cli.sh
),其与詹金斯服务器进行通信,它看起来像这样:在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}
这工作得很好。
例如,如果我拨打./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 for Windows附带的bash或它如何处理换行符或我如何处理脚本中的参数等事实有关。如果我执行./jenkins_cli.sh localhost/ list-jobs | xargs -L1 echo
我得到预期的结果没有任何引号..我真的不知道如何进一步调试这个问题我有一个解决方案,我只是写作业列表到一个文件,然后读取每一行,并通过我吨至我的自定义脚本,但我真的想与xargs
:)
我觉得现在的问题是,从你的jenkins
命令的输出使用输出的DOS结束线条样式(\r\n
)来实现它,但git shell命令期望经典的UNIX行结尾样式(\n
)。
问题在于xargs
将流浪的\r
看作是行尾的特殊字符,并试图将其转义。但是,即使一切顺利,下一个命令的参数不会是test_job
,而是test_job\r
(\r
可能不可见)。
最简单的解决方案是使用dos2unix
:
java -jar jenkins-cli.jar -s $JENKINS_SERVER -auth $JENKINS_CREDENTIALS ${@:2} | dos2unix
我忘了提:如果我使用'./jenkins_cli本地主机/删除在职test_job'它删除按预期 – tim