bind to string com escaped aspas duplas

3

Estou tentando ligar Alt-s a um comando SSH que é bastante complexo e requer aspas duplas aninhadas.

bind '"\es":"ssh -t me@myserver  \"echo \"hi\"; echo \"bye\"\""'

Mas quando eu executo a metade da cadeia de atalhos de teclado é truncado:

ssh -t me@myserver  "echo \"hi\";

Como faço para inserir toda a string? Eu não sei se isso é um problema com o espaço após o ponto e vírgula, ou com todo o duplo escape de aspas duplas.

Nota : Eu não quero usar bind -x style porque aquele a) não imprime o comando atual b) executa-o sem qualquer capacidade de modificar manualmente a linha antes de executá-la pressionando enter.

    
por user7000 15.07.2017 / 08:50

1 resposta

2

Escapear para strings de shell é complicado. Experimente:

bind '"\es":"ssh -t localhost  \"echo \\"hi\\"; echo \\"bye\\"\""'

Após o comando acima ser executado, então Esc-s deve resultar no seguinte texto na linha de comando:

ssh -t localhost  "echo \"hi\"; echo \"bye\""

Isso funcionará corretamente. Quando executado, produz a saída:

hi
bye
Connection to localhost closed.

O problema foi que \" é interpretado como uma única barra invertida seguida por uma aspas duplas ativadas por shell. Você precisa escapar da aspa dupla para que fique inativa. Assim \\" .

    
por 15.07.2017 / 09:05

Tags