usando linhas de saída como um array no bash

usando linhas de saída como um array no bash

Eu tenho um banco de dados mysql em um host compartilhado. Ele cresceu muito e um único processo de despejo com compactação está sendo interrompido. Quero despejar e compactar cada tabela individualmente. Com este comando

mysqldump -uuser -ppass database < show_tables.sql

Consigo fazer com que ele retorne todos os nomes das tabelas assim:

table1
table2
etc
...

Como posso alimentar isso em um script bash para poder alimentar cada linha em um comando desta sintaxe

mysqldump -uuser -ppass database table_name_goes_here > and_here.sql

?

EditarDesculpe pessoal, cometi um erro na formatação original. A saída da show tablesconsulta não é uma única linha com nomes de tabelas delimitados por espaços; na verdade, é um nome de tabela por linha, conforme está formatado agora. Eu peço desculpas pela confusão.

Responder1

mysqldump -uuser -ppass database < show_tables.sql |
xargs -I TableName sh -c 'mysqldump -uuser -ppass database TableName > TableName.sql'

Responder2

Supondo que os nomes das tabelas não possam conter novas linhas,

mysqldump -uuser -ppass database < show_tables.sql | 
while IFS= read -r table; do
        mysqldump -uuser -ppass database "$table" > and_here.sql
done

Responder3

Omanualdiz

   Arrays are assigned to using compound assignments of the form name=(value1 ... valuen),

então você só precisa colocar a saída do seu comando onde diz value1 ... valuen.

Você pode fazer isso assim

databases=( $(mysqldump -uuser -ppass database < show_tables.sql) )

e então itere sobre eles assim

for database in ${databases[*]}; do
    ...
done

mas caso o nome da sua tabela seja realmente estranho e contenha algumas novas linhas, recomendo usar mysql -Bsepara listar os bancos de dados e/ou tabelas e usar while read IFS=como jw013 sugere (possivelmente sem a -ropção).

Responder4

mysql database -e 'show tables' | while read table
do mysqldump -uuser -ppass database "$table" -r "$table.sql"
done

Também funciona com espaços nas tabelas.

informação relacionada