
Eu uso plink.exe para automatizar comandos git e isso funciona bem. Mas preciso usar isso com servidores com login do sudo
plink.exe -ssh [email protected] -m commands.txt
meu arquivo command.txt, por exemplo:
echo -e "MYPASSWORD\n" | sudo -S -i
cd /home/www/argentium.ru
git checkout HEAD~3
e a saída parece estar logada, mas o git é executado como se funcionasse sem o login do sudo:
[sudo] password for argentium: fatal: Unable to create '/home/www/argentium.ru/.git/index.lock': Permission denied
Com ajuda putty.exe funciona bem
сentos-7-x86_64-minimal @ 23.11.2016
-bash-4.2$ sudo -i
[sudo] password for argentium:
[root@stilnoeserebro ~]# cd /home/www/argentium.ru
[root@stilnoeserebro argentium.ru]# git checkout HEAD~3
Note: checking out 'HEAD~3'.
Responder1
O comando sudo -S -i
lê a senha e os comandos da entrada padrão.
Na echo -e "MYPASSWORD\n" | sudo -S -i
entrada padrão é do pipe, que retorna uma nova linha e, em seguida, um fim de arquivo após a leitura da senha: os comandos restantes são executados no shell normal.
Existem algumas maneiras de contornar: o que está mais próximo do que você codificou é usar umaqui-documento:-
sudo -S -i <<EOF
MYPASSWORD
cd /home/www/argentium.ru
git checkout HEAD~3
EOF
Alternativamente, você pode adicionar todos os comandos ao fluxo de entrada: –
echo -e "MYPASSWORD\ncd /home/www/argentium.ru\ngit checkout HEAD~3" | sudo -S -i
Observe que testei isso em um bash
shell normal, pois não tenho uma configuração onde possa testar facilmente com o plink
.