Por que o Konsole expande o $ VAR dentro de aspas simples na opção de linha de comando -e?

0

Eu quero imprimir uma string e ter certeza de que todos os $VAR s dentro dela não sejam expandidos para seus valores.
É por isso que coloco meu texto entre aspas simples.

Exemplo:

echo '$SHELL';read -sn 1

Este comando exibe $SHELL não expandido e aguarda até que o usuário pressione qualquer tecla.

Agora vamos citar esta string e preceder com bash -c :

bash -c 'echo '\''$SHELL'\'';read -sn 1'

Este comando faz exatamente o mesmo que o anterior.

Mais uma citação para obter a string final:

'bash -c '\''echo '\''\'\'\''$SHELL'\''\'\'\'';read -sn 1'\'

Preste atenção ao seguinte fato:
em cada etapa a subseqüência central $SHELL é dentro de aspas simples , portanto, não pode ser expandida .

Agora vamos testar nossa string final:

Teste 1:

bash -c 'bash -c '\''echo '\''\'\'\''$SHELL'\''\'\'\'';read -sn 1'\'

Funciona bem: exibe $SHELL não expandido e aguarda até que o usuário pressione qualquer tecla.

Teste 2:

gnome-terminal -e 'bash -c '\''echo '\''\'\'\''$SHELL'\''\'\'\'';read -sn 1'\'

Funciona bem: o $SHELL não expandido é exibido dentro da nova janela do terminal.

Teste 3:

konsole -e 'bash -c '\''echo '\''\'\'\''$SHELL'\''\'\'\'';read -sn 1'\'

Este teste falha: /bin/bash é exibido em vez de $SHELL .

Perguntas:
1) Por que konsole desobedece as regras de cotação?
2) Como passar uma string como parâmetro para konsole -e e ter certeza de que ela não será expandida?

Editar :
O uso de strace não deu nenhum resultado: sua saída não contém uma string executada pelo konsole.

    
por Egor Skriptunoff 15.04.2016 / 01:59

0 respostas