在shell環境中,如果直接使用sudo命令將結果通過管道寫入文件,會發生權限問題。例如
sudo echo "JAVA_HOME=/usr/local/jre" >> /etc/profile
其中,/etc/profile的權限是644,發生權限不足的報錯。
這可能是由于sudo只針對執行命令權限,并沒有針對寫入文件權限。我們需要用bash -c方式包裝整個命令執行(注意雙引號的轉義)
sudo bash -c "echo \"JAVA_HOME=/usr/local/jre\" >> /etc/profile"
另一種方法是采用tee命令
sudo echo "JAVA_HOME=/usr/local/jre" | sudo tee -a /etc/profile > /dev/null