Substituição de comandos: arquivo ou comando não encontrado

2

O script a seguir

#!/bin/bash
QUERY='select * from cdr;'
MYROWS=$("sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db '${QUERY}'")

me dá

./bla.sh: row 35: sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db 'select * from cdr;': file or directory not found

Se eu executar diretamente

sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db 'select * from cdr;'

então funciona. Eu acho que há algum erro com as cotações que não podem ser vistas na mensagem de erro. Por favor, note que eu preciso das aspas simples ao redor

select * from cdr;

Obrigado por qualquer dica sobre o que estou fazendo de errado!

    
por stefan.at.wpf 09.09.2012 / 23:00

1 resposta

6

O que está dentro de $(…) é um comando shell com a sintaxe usual. As aspas duplas em torno do snippet inteiro que você pretende como um comando fazem com que seja analisado como uma única palavra, que é a primeira palavra do comando, de modo que é interpretada como um nome de comando.

Além disso, sua citação de $QUERY não está correta: você precisa de aspas duplas em torno dela para que a variável seja expandida.

MYROWS=$(sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db "${QUERY}")
    
por 10.09.2012 / 02:12