Um problema de citação. Isso é o que acontece:
"sudo /usr/localcw/bin/eksh -c 'cd $DEST; sed -i "/Logmon/ s/^/#/" nrds.cfg'"
^ double quoting starts ends here^ starts anew^ ends^
Por causa disso, sshd
no lado remoto é executado:
sudo /usr/localcw/bin/eksh -c 'cd $DEST; sed -i /Logmon/ s/^/#/ nrds.cfg'
eksh
fica:
cd $DEST; sed -i /Logmon/ s/^/#/ nrds.cfg
então agora a expressão # 1 para sed
é apenas /Logmon/
. Para corrigir isso, você deve evitar as aspas duplas que devem chegar ao lado remoto, assim:
"sudo /usr/localcw/bin/eksh -c 'cd \"$DEST\" && sed -i \"/Logmon/ s/^/#/\" nrds.cfg'"
Existem algumas melhorias extras:
- Também cito
$DEST
para garantir que você recebacd "<local value of $DEST>"
no lado remoto, em vez decd <local value of $DEST>
. Isso não faz diferença no seu caso particular agora, quando o valor é/usr/local/nrdp/clients/nrds/
; mas se você alterou esse caminho para, por exemplo,/foo/bar baz/
, então, ele quebraria sua invocação "% de coquetel"cd
. -
&&
garante quesed
seja executado apenas secd
for bem-sucedido (não sei se funciona emeksh
, o que quer que seja; no entanto, ele funciona em muitos shells). Se por algum motivocd
falhar,sed
não atuará no diretório inicial. Novamente, isso provavelmente nunca vai bater em você, ainda é uma boa prática geral.