Bash

管道密碼到sudo和其他數據到sudoed命令

  • February 13, 2021

這兩個命令都有效:(注意-Sinsudo告訴 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

關鍵是使用相同的標準輸入sudotee因此兩者都將從相同的源讀取。我們應該把“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是相同的,都重定向標準輸入。

引用自:https://unix.stackexchange.com/questions/391796