我使用 plink.exe 来自动化 git 命令,效果很好。但我需要将它与使用 sudo 登录的服务器一起使用
plink.exe -ssh [email protected] -m commands.txt
例如我的commands.txt文件:
echo -e "MYPASSWORD\n" | sudo -S -i
cd /home/www/argentium.ru
git checkout HEAD~3
输出看起来像是已登录,但 git 执行时就像没有 sudo 登录一样:
[sudo] password for argentium: fatal: Unable to create '/home/www/argentium.ru/.git/index.lock': Permission denied
在帮助下 putty.exe 可以正常工作
с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'.
答案1
该命令sudo -S -i
从标准输入读取密码和命令。
标准echo -e "MYPASSWORD\n" | sudo -S -i
输入来自管道,在读取密码后返回一个换行符,然后返回文件结束符:其余命令在普通 shell 中运行。
有几种方法可以解决此问题:最接近您编码的方式是使用此处文档:-
sudo -S -i <<EOF
MYPASSWORD
cd /home/www/argentium.ru
git checkout HEAD~3
EOF
或者,您可以将所有命令添加到输入流:-
echo -e "MYPASSWORD\ncd /home/www/argentium.ru\ngit checkout HEAD~3" | sudo -S -i
请注意,我已经在普通bash
shell 上对此进行了测试,因为我没有可以轻松进行测试的设置plink
。