ls -tdはどのディレクトリも認識しません

ls -tdはどのディレクトリも認識しません

シェルスクリプトにはいくつかの問題があります。スクリプトの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')"

エラーはもう存在しません。実際、私の問題は、ローカルホストがリモートホストの範囲と同じディレクトリ構造を持っていないことです。

おすすめ記事