Bash管道密碼到
管道密碼到sudo
和其他數據到sudo
ed命令
這兩個命令都有效:(注意
-S
insudo
告訴 sudo 從標準輸入讀取密碼)。echo 'mypassword' | sudo -S tee -a /etc/test.txt &> /dev/null echo -e '\nsome\nmore\ntext' | sudo tee -a /etc/test.txt &> /dev/null
現在我想將兩者結合起來,即在一行中實現所有內容。但是,當然,這樣的事情是行不通的:
echo -e '\nsome\nmore\ntext' | echo 'mypassword' | sudo -S tee -a /etc/test.txt &> /dev/null
什麼會起作用?謝謝:) - 負載
PS:無關緊要的小問題: 1> 與 > 相同嗎?我相信他們是..
這將做:
{ echo 'mypassword'; echo 'some text'; } | sudo -k -S tee -a /etc/test.txt &>/dev/null
關鍵是使用相同的標準輸入
sudo
,tee
因此兩者都將從相同的源讀取。我們應該把“mypassword”+“\n”放在我們想要傳遞給的任何東西之前tee
。解釋命令:
- 花括號分組命令。我們可以將
{...}
其視為一個命令。無論是在{...}
寫入管道。echo 'mypassword'
將“mypassword\n”寫入管道。這是sudo
稍後閱讀的。echo 'some text'
將“一些文本\ n”寫入管道。這是tee
最終會達到的。sudo -k -S
從它的標準輸入(即管道)讀取密碼,直到到達“\n”。所以這裡將使用“mypassword\n”。-k
開關是為了確保sudo
提示輸入密碼,如果最近使用過,則忽略使用者的記憶體憑據。tee
從標準輸入讀取,它會得到其中的任何內容,“一些文本\n”。PS:關於 I/O 重定向:是的,你是對的,
1>filename
與>filename
. 他們都將 stdout 重定向到filename。並且0<filename
和<filename
是相同的,都重定向標準輸入。