ls -td 无法识别任何目录

ls -td 无法识别任何目录

我在处理 shell 脚本时遇到了一些问题。脚本中的一个命令用于将一组命令从 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

正如埃里克之前提到的,这些问题是由于范围界定造成的。

我有许多本地变量通过未列出的复合 ssh 指令发送和推送,这需要使用双引号。由于我希望 ls -td 远程执行,因此我专门创建了一个全新的 ssh 命令来设置此变量。设置变量后,我像其他变量一样输入它。

    export variable="$(ssh -q -o Batchmode=yes mysql@$host 'ls -td ${backup_dir}/FULL/*/ | head -1')"

该错误不再存在。事实上,我的问题是本地主机与远程主机没有相同目录结构的范围。

相关内容