Como posso escapar corretamente de uma string para ser passada para um shell com um argumento de comando [duplicate]

1

Como posso escapar de comandos arbitrários?

Por exemplo:

sudo -u chris sh -c 'echo "\"leftright\""'

Os ecos acima:

"leftright"

Como eu ecoaria:

"left'right"

Eu tentei o seguinte, que eu esperaria que funcionasse, mas não:

sudo -u chris sh -c 'echo "\"left\'right\""'

Eu não consigo entender como é analisado.

    
por Chris Stryczynski 19.07.2015 / 21:24

2 respostas

0

sudo -u chris sh -c 'echo "\"left'\''right\""'

    
por 19.07.2015 / 21:29
0
 sh -c 'echo "\"left'"'"'right\""'

OR

 sh -c 'echo "\"left'\''right\""'

funcionará.

Qualquer um dos itens acima passará

 echo "\"left'right\""

após -c .

Quando você está dentro de uma única string entre aspas, não há como escapar do fechamento da string.

Para passar uma citação única, você pode usar

 "'"

ou

 \'

.

O shell irá concatenar argumentos adjacentes que não tenham um separador de campo de entrada (geralmente espaço) entre eles.

    
por 19.07.2015 / 21:55