Executa sed como um comando ssh único

1

Eu gostaria de substituir uma string por outra em um arquivo em um servidor meu. Eu tentei fazer isso:

ssh $REMOTE_HOST sed 's|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|' "$ENV_FILE"

E um monte de variantes com diferentes tipos de citações, mas eu simplesmente não consigo fazer isso funcionar. O comando sed funciona quando eu substituo manualmente as variáveis pelos valores e os executo no servidor.

O comando acima apresenta o seguinte erro:

bash: {env_file_redacted}: Permission denied
bash: line 0: export: '=': not a valid identifier
bash: line 0: export: '=': not a valid identifier
sed: -e expression #1, char 1: unterminated 's' command

Como eu disse, o comando funciona quando eu o executei no servidor para que não seja um problema de permissões.

Qual é o problema aqui?

    
por Lars Nyström 27.07.2014 / 18:36

1 resposta

1

Se todas as variáveis (além de $ REMOTE_HOST) estiverem disponíveis no ambiente em seu servidor remoto, você pode tentar:

ssh $REMOTE_HOST 'echo sed "s|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|" "$ENV_FILE"'

E se tudo estiver bem, remova echo .

Atualizar

Com variáveis locais:

ssh $REMOTE_HOST "echo sed \"s|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|\" \"$ENV_FILE\""

E se tudo estiver bem, remova echo .

    
por 27.07.2014 / 18:50