
我使用 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
.