bash error em eval contendo espaço em branco

1

Eu preciso disparar um parâmetro de passagem bash com um formato [variable_name="value"] como este:

./test.sh ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano'

No script test.sh, quero atribuir a qualquer variável o valor relevante:

#!/bin/bash
eval 'echo "$@"'
echo $ftpcmd

Mas recebo um erro prova: command not found .

Não consigo entender o que está errado no meu parâmetro ftpcmd='CWD debug' nem como devo escrevê-lo.

Se eu tentar substituir eval com declare, o $ftpcmd será definido apenas para CWD em vez de CWD debug , como esperado.

    
por Stefano Radaelli 02.10.2015 / 12:37

1 resposta

2

Se você colocar as atribuições antes do script

ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano' ./test.sh 

as variáveis estão disponíveis no ambiente do script. A opção -k trata as atribuições all , não apenas as atribuições pré-comando, como modificações do ambiente.

set -k
./test.sh ip='164.130.21.98' hostname='whatever' pwd='/test' ftpcmd='CWD debug' user='stefano'
set +k

Em ambos os casos, eval não é obrigatório e pode ser removido.

    
por 02.10.2015 / 17:14