Você deseja passar de command_with_arguments
para
%código%.
Você obtém command "escaped_command_with_arguments"
verificando escaped_command_with_arguments
da esquerda para a direita e substituindo cada command_with arguments
por \
e cada \
por "
.
como alternativa, você coloca \"
em um editor e
- substitua todos os
command_with_arguments
por\
- substitua cada
\
por"
nesta ordem. Então, passo a passo, você pode gerar a seguinte seqüência de expressões (eu usei o bloco de notas do Windows para criar a expressão)
select *
db2 "select *"
sudo "db2 \"select *\""
ssh "sudo \"db2 \\"select *\\"\""
ssh "ssh \"sudo \\"db2 \\\\"select *\\\\"\\"\""
ssh "ssh \"ssh \\"sudo \\\\"db2 \\\\\\\\"select *\\\\\\\\"\\\\"\\"\""
ssh "ssh \"ssh \\"ssh \\\\"sudo \\\\\\\\"db2 \\\\\\\\\\\\\\\\"select *\\\\\\\\\\\\\\\\"\\\\\\\\"\\\\"\\"\""
Se você contar os números de \"
antes de cada \
na última expressão, você obtém o seguinte sequência:
0 1 3 7 15 31 31 15 7 3 1 0
ou
1-1 2-1 4-1 8-1 16-1 32-1 32-1 16-1 8-1 4-1 2-1 1-1
Portanto, é possível construir uma expressão aninhada em uma única etapa sem iteração, mas você deve cuidar de como as expressões são aninhadas.
Além disso, esses métodos podem ser estendidos para situações em que há outros caracteres de escape além de "
e "
.
Portanto, coloque seu comando em um editor, substitua \
por server1
, substitua server2
por \
e \
por "
conforme descrito acima e adicione \"
no início e ssh server1 "
no final e você terá
ssh server1 "ssh server2 \"sudo -u db2inst1 sh -c '/opt/ibm/db2/V9.7/bin/db2 connect to RATIONAL; /opt/ibm/db2/V9.7/bin/db2 set schema Edumate; /opt/ibm/db2/V9.7/bin/db2 \\"select * from edumate_settings\\"'\""