Problema ao redirecionar entrada e saída padrão

0

Desejo receber backup dos meus mysql dados usando mysqldump . Eu tenho três arquivos contendo nomes de mysql tables linha por linha. Meu script tem essa linha -

mysqldump -h localhost -uroot --lock-tables=false db < $2 > ~/backup/$name'.sql'

Estou usando getopts para lidar com options . Então, basicamente $2 é o arquivo que eu vou fornecer. Este arquivo tem - table1 e table2. Portanto, esse comando só deve fazer backup dessas duas tabelas.

Mas quando eu cat o arquivo ~/backup/name.sql mostra todo o backup de db . Não tenho certeza se é o backup combinado de todas as tabelas de todos os 3 arquivos ou o banco de dados inteiro. Mas está fazendo backup do banco de dados inteiro em vez de duas tabelas.

O que estou fazendo de errado?

Funciona bem quando eu coloco assim -

mysqldump -h localhost -uroot --lock-tables=false db table1 table2 >  ~/backup/$name'.sql'
    
por Hussain Tamboli 09.10.2012 / 08:38

2 respostas

1

A razão pela qual ele falha é que o mysqldump não lê a entrada padrão; table1 e table2 são argumentos (opcionais), mas você os está fornecendo não na linha de comando, mas no stdin.

Se $2 for o nome do arquivo de um arquivo que contenha uma linha com o texto table1 table2 , o seguinte deverá funcionar:

mysqldump -h localhost -uroot --lock-tables=false db 'cat $2' > ~/backup/$name'.sql'

Bash expandirá esta linha de comando para

mysqldump -h localhost -uroot --lock-tables=false db table1 table2 > /home/user/backup/somename.sql

que é o que você deseja executar.

No entanto, como você está usando getopt de qualquer forma, talvez você possa colocar "table1" em $2 e "table2" em $3 e executar apenas

mysqldump -h localhost -uroot --lock-tables=false db $2 $3 > ~/backup/$name'.sql'
    
por January 09.10.2012 / 09:16
1

Depende um pouco de como você está executando o script, mas você deve poder usar back-ticks e catar o arquivo.

mysqldump -h localhost -uroot --lock-tables=false db 'cat $2' > ~/backup/$name'.sql
    
por coreyg 09.10.2012 / 09:17