シェルスクリプトにはいくつかの問題があります。スクリプトの1つのコマンドは、JenkinsホストからMySQLデータベースホストにコマンドセットをプッシュして、MySQLデータベースへの「ローカル」バックアップを実行するために使用されます。
後で使用するために変数をエクスポートすると問題が発生します。匿名の例:
ssh -q -o Batchmode=yes mysql@${host} \
"export variable=$(ls -td ${backup_path}/FULL/*/ | head -1); \
echo $variable"
目的ls -td
は、最後に作成されたディレクトリをサブディレクトリにインポートすることです${backup_path}/FULL
。
この特定のコマンドを実行したときに発生するエラーは次のとおりです。
ls: cannot access ${backup_path}/FULL/*/: No such file or directory
echo は$incr_basedir
空の出力も返します。
${backup_path}/FULL にサブディレクトリがあることを確認し、権限を確認してみました。結果は次のとおりです。
-bash-4.2$ pwd
${backup_path}/FULL
-bash-4.2$ ls -l
total 498
drwxr-x---. 28 mysql mysql 2019 May 3 16:53 2017-05-03_16-47-37
目標を達成し続けるにはどうすればよいですか?
答え1
Ericが前述したように、これらの問題はスコープの指定によって引き起こされます。
リストされていない複合SSHコマンドを介して送信されプッシュされたいくつかのローカル変数があります。ここでは二重引用符を使用する必要があります。 ls -tdをリモートで実行したいので、この変数を設定するために特別に新しいsshコマンドを作成しました。変数を設定したら、他の変数と同じように入力します。
export variable="$(ssh -q -o Batchmode=yes mysql@$host 'ls -td ${backup_dir}/FULL/*/ | head -1')"
エラーはもう存在しません。実際、私の問題は、ローカルホストがリモートホストの範囲と同じディレクトリ構造を持っていないことです。