O script Bash não está funcionando

1

Eu queria criar um script que executasse o comando ls com os argumentos fornecidos. Por que não está funcionando? Eu tentei executá-lo com por exemplo -R , então ele ecoa (eu repeti a mesma coisa para comparação):

    ls "-R"

mas diz que não pode acessar "-R": nenhum arquivo ou diretório. Mas quando executo ls "-R" no terminal, funciona.

O script em si:

text='ls'

while [[ $# -gt 0 ]]
do
    text+=' "'
    text+=$1
    text+='"'

    shift

done
echo 'ls "-R"'

echo $text
$text
    
por Darge Elar 23.03.2014 / 19:55

2 respostas

3

A citação incorreta é o problema. " não cita (e, qual é o problema aqui, não é removido!) se estiver contido em uma variável. Exceção: eval $text

Você deve atribuir os parâmetros a uma matriz e usar ls "${vars[@]}" ou ls "$@" .

Compare as duas chamadas:

set -x
ls -l
ls "-l"
set +x
    
por 23.03.2014 / 20:01
3

Não é como citar o trabalho no bash. Ao entrar

ls "-R"

a remoção de cotações acontece no comando, então o comando se torna

ls -R

Se, por outro lado, você definir

text='ls "-R"'

e execute $text , a remoção da cotação não acontece. Veja man bash em EXPANSÕES:

After the preceding expansions, all unquoted occurrences of the characters \, ', and " that did not result from one of the above expansions are removed.

" aqui resultou da expansão do parâmetro, por isso não é removido.

    
por 23.03.2014 / 20:04