mysqldump通过bash脚本失败“没有这样的文件或目录”

Modified on: Thu, 15 Aug 2019 19:00:02 +0800

这个让我开心。任何帮助表示赞赏!

$MYSQLDUMP --login-path=$HOST $DATABASE > "$BACKUP_DIR/${HOST}__${DATABASE}__${NOW}.sql";
  • 我已经确认二进制$MYSQLDUMP(在脚本中)有一个有效的完整路径
  • 命令已完成(通过回声确认)
  • $NOW在脚本的早期设置,而不是在这里...所以时间不会改变我们或任何东西
  • 这不是通过cron
  • 运行的
  • 用户通过命令行执行脚本,也具有对实际目录的访问权限
  • 尝试dos2unix以确保没有奇怪的字符。我在Mac上,但是嘿......为什么不
  • 尝试逃避>,例如\>,而不是产生mysqldump: Couldn't find table: ">"错误

这个让我发疯了。不确定我在这里缺少什么?我们只是指导输出,我觉得这是一个非常明显的东西,我忽略了。

更新强>

在此处添加了一些调试和协助的测试。

vrb "\$BACKUP_DIR: $BACKUP_DIR"
vrb "whoami $(whoami)"
vrb "ls -ld \"$BACKUP_DIR/\" $(ls -ld \"$BACKUP_DIR/\")"
vrb "absolute path of user's home dir: $(cd ~/; pwd)"
vrb "absolute path of \$BACKUP_DIR: $(cd $BACKUP_DIR/; pwd)"

... ...产生

20160713T210808Z: $BACKUP_DIR: ~/www/__MYSQL/backup
20160713T210808Z: whoami william
ls: "~/www/__MYSQL/backup/": No such file or directory
20160713T210808Z: ls -ld "~/www/__MYSQL/backup/" 
20160713T210808Z: absolute path of user's home dir: /Users/william
./mygration.sh: line 383: cd: ~/www/__MYSQL/backup/: No such file or directory
20160713T210808Z: absolute path of $BACKUP_DIR: >> ERROR: 1

vrb只是在脚本中处理详细输出的另一个函数,所以不要被它吓到。它仅用于输出调试信息。

如果我手动将同一终端中的内容列入~/www/__MYSQL/backup/,我可以看到以下内容:

$ ls -la ~/www/__MYSQL/backup/
total 0
drwxr-xr-x  2 william  staff   68 Jul 13 20:55 .
drwxr-xr-x  6 william  staff  204 Jul 13 20:55 ..

这很奇怪。几乎像Bash没有访问权限,但我的常规用户(首先运行bash脚本的用户)会这样做。

另一个更新

echo $(whoami);
echo ~;
exit;

... ...产生

william /Users/william

最佳答案

问题是你把波浪号放在双引号内。执行此操作时,扩展到主目录的路径。

考虑:

MacBook-Pro:~ error$ cat x.sh
#!/bin/sh
echo ~
echo "~"
ls ~
ls "~"
MacBook-Pro:~ error$ ./x.sh
/Users/error
~
Calibre Library Downloads   Music       bin
Desktop         Library     Pictures    synergy
Documents       Movies      Public      x.sh
ls: ~: No such file or directory
MacBook-Pro:~ error$ 

如果您希望继续使用双引号,请使用$HOME变量而不是代字号。

MacBook-Pro:~ error$ echo $HOME
/Users/error
MacBook-Pro:~ error$ echo "$HOME"
/Users/error
MacBook-Pro:~ error$ 
作者:,Michael Hampton

相关问答

添加新评论