셸 스크립트: 변수를 사용하여 명령이 실패하도록 함(변수 값을 수동으로 대체, 명령이 제대로 작동함)

셸 스크립트: 변수를 사용하여 명령이 실패하도록 함(변수 값을 수동으로 대체, 명령이 제대로 작동함)

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. 따라서 URL을 수정하세요.

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

관련 정보