这真让我抓狂。任何帮助都感激不尽!
$MYSQLDUMP --login-path=$HOST $DATABASE > "$BACKUP_DIR/${HOST}__${DATABASE}__${NOW}.sql";
- 我已经确认二进制文件
$MYSQLDUMP
(脚本内)具有有效的完整路径 - 命令已完成(通过 echo 确认)
$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
答案1
问题在于你把波浪号放在了双引号内。当你这样做时,不是扩展到你的主目录的路径。
考虑:
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$