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

这一个驱使我坚果。 任何帮助感激!

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

这个让我疯狂 不知道我在这里错过了什么? 我们只是指挥输出,我觉得这是我忽略的可笑的事情。

UPDATE

添加了一些更多的testing来debugging和帮助这里。

 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只是处理脚本中详细输出的另一个函数,所以不要担心。 仅用于输出debugging信息。

如果我手动列出同一terminal中的内容到~/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 

问题是你已经把双撇号在双引号。 当你这样做,它不会扩展到你的主目录的path。

考虑:

 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$ 

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

 MacBook-Pro:~ error$ echo $HOME /Users/error MacBook-Pro:~ error$ echo "$HOME" /Users/error MacBook-Pro:~ error$