O código de pipeline em um shell está quase sempre errado. Aqui, você já está executando código em um shell, não há absolutamente nenhuma razão para executar outro shell.
Além disso, não crie comandos colocando suas partes em uma string. Um comando é uma lista de cadeias de caracteres; se você tentar colocá-lo em uma string, perderá a distinção entre espaços que separam argumentos e espaços dentro de argumentos, e você encontrará problemas adicionais ao tentar dividir a string para executá-la , alguns dos quais têm implicações de segurança . Mas você não precisa disso aqui de qualquer maneira. Você está complicando demais as coisas.
form_value=$(cat myfileA.html | get_field_value )
wget -v --post-data="$form_value"
Se você quiser que a parte wget -v
seja variável, mas sob o controle do seu script e saiba que as partes não conterão espaços em branco ou% de\[*?
, você pode colocar essa parte em uma variável.
wget='wget'
if [ -n "$verbose" ]; then
wget="$wget -v"
fi
form_value=$(cat myfileA.html | get_field_value )
$wget --post-data="$form_value"
Se o seu script for executado em ksh ou bash ou zsh, mas não se for executado em sh simples, você poderá colocar o comando em uma matriz.
#!/bin/ksh
…
download=(wget -v --post-data="$form_value")
…
"${download[@]}"
Ao exibir o conteúdo, Cuidado com os caracteres de controle que podem fazer com que seu terminal execute ações ou deturpe o que é realmente impresso .
echo "$wget --post-data=$form_value" | tr -c '[:print:]' '?'