簡體   English   中英

bash腳本:sudo沒有交互式回顯重定向到文件

[英]bash script: sudo no interactive echo redirection to a file

在bash腳本中,我試圖將使用sudo非交互式的echo打印的文本重定向到文件。 但是我不清楚如何去做。

我嘗試使用以下代碼:

echo $sudopass| sudo -S echo "user ALL=(ALL) NOPASSWD:ALL" >     /etc/sudoers.d/ansible

輸出重定向不受提升的sudo權限影響。 sudo的部分是echo而不是該命令輸出的重定向。

在您當前用戶的許可下,這仍然會發生。

因此,您需要一種將行追加到不涉及輸出重定向的文件的方法。


注意: 如果目標文件為空或不存在,則此答案的較早版本將sed刪除,因為sed破壞sed 我想保持答案的要點不變-“如何避免輸出重定向”-我添加了有關如何將vi用於相同目的的說明。


每個符合POSIX的系統都需要具有vi / ex編輯器。 (在現代Linux機器上,通常以兼容模式啟動Vim的鏈接。)您可以通過命令行“遠程控制” ex / vi / Vim:

vi -es -c "normal! G" -c "normal! ouser ALL=(ALL) NOPASSWD:ALL" -c "x" /etc/sudoers.d/ansible

(為了清楚起見,這沒有sudo部分。)

說明:

  • -e在“ ex模式”下啟動vi (相當於致電ex 。)
  • -s表示“靜音”-沒有提示,沒有消息。
  • -c在讀取第一個文件后將命令傳遞給編輯器以執行該命令。
  • "normal! G"將編輯器置於“ normal mode”(正常模式),這就是您以交互方式啟動vi會遇到的情況; ex默認情況下處於“命令模式”(就像您在vi中輸入: )。 G將光標移到最后一行。
  • "normal! o..."再次激活正常模式,在當前行之后添加一行,然后激活“插入模式”。 字符串的其余部分按原樣輸入。
  • "x"保存文件並退出編輯器。

命令行包括sudo部分:

echo $sudopass | sudo -S vi -es -c "normal! G" -c "normal! ouser ALL=(ALL) NOPASSWD:ALL" -c "x" /etc/sudoers.d/ansible

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM