シェルスクリプト:変数を使用してコマンドを失敗させる(変数値を手動で置き換え、コマンドが正しく機能する)

シェルスクリプト:変数を使用してコマンドを失敗させる(変数値を手動で置き換え、コマンドが正しく機能する)

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

もう1つの質問は、Windows行の末尾のファイルやコマンド出力があるかのように聞こえることです。これはinput.csv何でも構いませんが、削除する必要があります。最初の実行

dos2unix input.csv

または 1 つもない場合は、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

関連情報