Назад | Перейти на главную страницу

mysqldump через bash-скрипт с ошибкой «Нет такого файла или каталога»

Это сводит меня с ума. Любая помощь приветствуется!

$MYSQLDUMP --login-path=$HOST $DATABASE > "$BACKUP_DIR/${HOST}__${DATABASE}__${NOW}.sql";

Это сводит меня с ума. Не уверен, что мне здесь не хватает? Мы просто направляем результаты, и мне кажется, что я упускаю из виду нечто смехотворно очевидное.

ОБНОВИТЬ

Здесь добавлены еще несколько тестов для отладки и помощи.

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$