由於最近須要批量的向服務器系統文件中追加內容,之前都是直接用sudo就作了,可是……bash
舉個例子,好比我遠程向服務器的/tmp/中建立一個文件test.txt,再將本機的一個文件傳到服務器的/tmp/目錄下:服務器
Mac:~ wangdong$ ssh backup1 "sudo touch /tmp/test.txt"
上面的命令,雖然權限不對,可是用了sudo是以root權限執行了,沒有什麼問題。ssh
可是如今我須要遠程將一條新的crontab內容追加到系統的/etc/crontab文件中,若是依舊使用上面的方法:ide
Mac:~ wangdong$ ssh backup1 "sudo echo "10 10 * * * root echo 123" >> /etc/crontab" bash: /etc/crontab: Permission denied Mac:~ wangdong$
在報錯中能夠看到,提示是bash的權限錯誤,可是我命令中並無使用bash。crontab
其實使用的「>>」是一個bash,sudo命令只是給了echo的root權限,可是「>>」並無權限。it
這裏能夠使用bash -c解決,例如:io
Mac:~ wangdong$ ssh backup1 'sudo bash -c "echo "10 10 * * * root echo 123" >> /etc/crontab"'
這樣就沒問題了。class