mysqldump via script bash falhando com “Nenhum tal arquivo ou diretório”

6

Isso está me levando a NUTS. Qualquer ajuda apreciada!

$MYSQLDUMP --login-path=$HOST $DATABASE > "$BACKUP_DIR/${HOST}__${DATABASE}__${NOW}.sql";
  • Confirmei que o binário $MYSQLDUMP (dentro do script) tem um caminho completo válido
  • O comando está completo (confirmado via echo)
  • $NOW é definido no início do script, e não aqui ... então o tempo não está mudando em nós ou qualquer coisa
  • Isso não está sendo executado via cron
  • O usuário que está executando o script pela linha de comando também tem acesso / permissões ao diretório real
  • Tentei dos2unix para garantir que não haja caracteres estranhos. Eu estou em um Mac, mas ei ... por que não
  • Tentativa de escapar do > like \> , que, em vez disso, produz um erro mysqldump: Couldn't find table: ">"

Isso está me deixando louco. Não tem certeza do que estou sentindo falta aqui? Estamos apenas direcionando a saída, e eu sinto que é algo ridiculamente óbvio que estou negligenciando.

ATUALIZAÇÃO

Adicionamos mais alguns testes para depurar e ajudar aqui.

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)"

... produz ...

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 é apenas outra função que processa a saída detalhada no script, portanto, não se assuste com isso. É apenas para produzir as informações depuradas.

Se eu listar manualmente o conteúdo no mesmo terminal para ~/www/__MYSQL/backup/ , posso ver o seguinte:

$ 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 ..

É estranho. Quase como Bash não tem acesso, mas o meu usuário regular (aquele que executa o script bash em primeiro lugar) faz.

OUTRA ATUALIZAÇÃO

echo $(whoami);
echo ~;
exit;

... produz ...

william
/Users/william
    
por Will Ashworth 14.07.2016 / 05:17

1 resposta

8

O problema é que você colocou o til dentro de aspas duplas. Quando você faz isso, não é expandido para o caminho do seu diretório pessoal.

Considere:

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$ 

Se você deseja continuar usando aspas duplas, use a variável $HOME em vez do til.

MacBook-Pro:~ error$ echo $HOME
/Users/error
MacBook-Pro:~ error$ echo "$HOME"
/Users/error
MacBook-Pro:~ error$ 
    
por 14.07.2016 / 06:34

Tags