saída de comando do conjunto de scripts para variável [duplicada]

0

Estou escrevendo um script simples que solicita ao usuário informações e as salva como uma variável a ser passada como argumentos em outro comando. Uma das variáveis armazena um caminho que pode incluir um espaço. Usando a tag read do comando -r , o caminho é recuperado como uma entrada 'bruta', ignorando o caractere de escape da barra invertida.

Por exemplo:

read -p "Enter checksum algorithm number (1, 224, 256, 384, 512, 512224, 412256): " -a shaa
read -p "Enter a file path: " -re shapath

O problema é que não consigo descobrir como executar o comando com esses argumentos sem ler o caractere de escape. Resolvido por @heemayl

Eu então preciso armazenar a saída ou o valor de retorno do comando como outra variável.

Por exemplo:

foo=$(shasum -a "$shaa" "$shapath")

No entanto, quando eu echo $foo , não obtenho a saída esperada de shasum -a "$shaa" "$shapath" , mas obtenho shasum: /.../checksum.dmg

Consegui fazê-lo funcionar usando eval e canalizando-o para var , conforme mostrado abaixo:

eval shasum -a $sha $shapath > val

Li que devo evitar eval a todo custo e não posso continuar avançando com o script.

    
por andrewkeithly 01.07.2016 / 19:42

1 resposta

3

Use aspas:

shasum -a "$sha" "$shapath"

As variáveis serão expandidas como argumentos únicos, independentemente de quaisquer espaços nos valores.

    
por 01.07.2016 / 19:48