Envia automaticamente a entrada de arquivo para o comando usando variáveis expandidas

1

Eu preciso enviar algumas credenciais definidas em um arquivo para um comando de conexão vpn que está aguardando que o nome de usuário e a senha sejam inseridos quando executados. Existe um requisito semelhante à minha pergunta Insira automaticamente a entrada na linha de comando .

A solução a seguir fornecida também funciona para mim:

printf 'username\npassword\n' | /usr/sbin/openconnect -i vpn0 ...

(executado dentro de um script de shell). Mas preciso passar as credenciais contidas em um arquivo ( env_properties ) e carregadas como variáveis de ambiente. Estou carregando o conteúdo do arquivo usando o seguinte comando:

[ -f env_properties] && . env_properties

O conteúdo é exibido da seguinte forma

export VPN_USERNAME=myUsername
export VPN_PASSWORD=myPassword

No entanto, essa construção não funciona mais:

printf "${VPN_USERNAME}\n${VPN_PASSWORD}\n" | /usr/sbin/openconnect -i vpn0 ...

Parece que a entrada não é reconhecida corretamente por qualquer motivo. E nem este comando

printf "/usr/sbin/openconnect -i vpn0 ... < env_properties

com um conteúdo de arquivo modificado contendo apenas nome de usuário e senha simples, cada um em uma nova linha. O mesmo se aplica à solução here document .

Alguma idéia?

    
por user35934 18.06.2017 / 17:48

2 respostas

1

Em vez de:

printf "${VPN_USERNAME}\n${VPN_PASSWORD}\n"

tente isto:

printf "%s\n%s\n" “$VPN_USERNAME” “$VPN_PASSWORD”
    
por Gunnar Hjalmarsson 18.06.2017 / 17:59
0

Tola eu! O arquivo de entrada possui retornos de carro que o sistema Linux obviamente não pode lidar. Depois de removê-los, o comando de impressão que postei agora funciona.

    
por user35934 18.06.2017 / 20:03