Problema de script de bash do Linux com curinga

0

Estou tendo problemas com o que imagino que deva ser um simples comando bash

Estou basicamente tentando passar por vários arquivos e chegar lá nomes

'ls ./*.sql'               # list all files ending with .sql

if [ $? != 0 ]             # make sure such files exist
then
    echo "no such file"
else 
    echo "files exist"
fi

Quando eu corro

"ls ./*.sql"

Eu obtenho o que espero

./file01.sql    ./file02.sql

No entanto, quando executo o script, recebo

./file01.sql: line 1: some random error
./file01.sql: line 2: some random error
./file01.sql: line 3: some random error
./file02.sql: line 1: some random error
./file02.sql: line 2: some random error
./file02.sql: line 3: some random error

Alguém tem alguma ideia de por que isso seria diferente?

    
por Trent 08.04.2015 / 11:36

2 respostas

3

São as citações de retorno. Eles dizem ao shell para executar a saída do comando.

por exemplo,

'echo ls'

executará ls .

No seu caso, você pediu o bash para executar os arquivos sql. Isso obviamente não é o que você pretendia, como bash não pode fazer isso, o sql não fará sentido para bash.

Além disso, mesmo com essa correção, o script não fará o que você descreve. Outra pessoa (Janis) deu uma resposta para corrigir isso também, mas eles não explicaram por que seu script fez o que fez.

    
por 08.04.2015 / 11:41
2

Para "percorrer um monte de arquivos [ .sql] e obter seus nomes" você acabou de fazer:

for f in *.sql
do
    do_whatever_with_file "$f"
done

Se você quiser apenas listar os arquivos:

ls *.sql

Se você quiser testar se há *.sql arquivos existentes, por exemplo:

if  ls *.sql >/dev/null 2>&1
then echo sql files existing
else echo no sql files
fi
    
por 08.04.2015 / 11:40