Shell 脚本:使用变量使命令失败(手动替换变量值;命令工作正常)

Shell 脚本:使用变量使命令失败(手动替换变量值;命令工作正常)

在 bash 脚本中:

    jenkins_folder=`cut -d "|" -f1 -s input.csv`
    jenkins_url='https://url.com:8181/jenkins/view/'
    echo "jenkins_folder : ${jenkins_folder}"
    for job in `java -jar jenkins-cli.jar -s ${jenkins_url}${jenkins_folder} list-jobs ${jenkins_folder} `
do
    echo "Job name:: ${job} ****"
    java -jar jenkins-cli.jar -s ${jenkins_url}${jenkins_folder} get-job ${job} > job.xml
done

给出以下输出

jenkins_folder : Platform-X.X.X-SPO-MyPD-Integration-Dummy
 ****ame:: NH-AccountManagementAudit-Consumer-MyPD-Integration-DUMMY-Reporting
'; perhaps you meant 'NH-AccountManagementAudit-Consumer-MyPD-Integration-DUMMY-Reporting'?

当我替换所有变量的值并运行以下命令时;效果很好

java -jar jenkins-cli.jar -s https://url.com:8181/jenkins/view/Platform-X.X.X-SPO-MyPD-Integration-Dummy get-job NH-AccountManagementAudit-Consumer-MyPD-Integration-DUMMY-Reporting > job.xml

我在这件事上浪费了太多时间。我什至尝试使用 eval 函数但没有运气。请帮忙。

感谢@Kusalananda,当我试图以奇怪的方式回显作业名称其打印输出时..我觉得这是根本原因..但不确定为什么会发生这种情况

如果我尝试缩短可变作业的长度(使用子字符串);然后打印得很好。因此,如果工作的价值是长期的;它正在制造问题

答案1

第一个问题很明显:您的 url 是https://url.com:8181/jenkins/view,因此由于它不以斜杠结尾,因此 的值${jenkins_url}${jenkins_folder}https://url.com:8181/jenkins/viewPlatform-X.X.X-SPO-MyPD-Integration-Dummy。因此修复网址:

jenkins_url='https://url.com:8181/jenkins/view/'

或者,在组合变量时添加斜杠:

${jenkins_url}/${jenkins_folder}

接下来,请记住始终引用您的变量:

java -jar jenkins-cli.jar -s "${jenkins_url}${jenkins_folder}" get-job "$job" > job.xml

您的另一个问题是,听起来您有一个带有 Windows 行结尾的文件或命令输出。这可能是input.csv或其他任何东西,但您需要删除它们。第一次运行

dos2unix input.csv

或者,如果您没有dos2unix,请运行:

sed -i 's/\r//' input.csv

然后再次尝试您的脚本。如果仍然不起作用,请用更多详细信息更新您的问题。如果\r来自您的jenkins-cli命令,请尝试以下操作:

jenkins_folder=`cut -d "|" -f1 -s input.csv`
jenkins_url='https://url.com:8181/jenkins/view/'
echo "jenkins_folder : ${jenkins_folder}"
java -jar jenkins-cli.jar \ 
 -s "${jenkins_url}/${jenkins_folder}" \
  list-jobs "$jenkins_folder" |
   sed 's/\r$//' | while read job
do
    echo "Job name:: ${job} ****"
    java -jar jenkins-cli.jar -s ${jenkins_url}${jenkins_folder} get-job ${job} > job.xml
done

相关内容