Bash

安裝腳本 - sudo 授權兼容性?

  • June 22, 2015

我目前正在更新一些腳本,併計劃發布一些有用的腳本,以便其他人可以使用它們(因此他們需要在各種機器上工作而不會崩潰,也不會破壞任何東西)。

其中一個在 Fedora 機器上添加了 chromium pepperflash 外掛和其他一些東西——我最初製作腳本是因為russianfedora 的事情在當時看起來不可靠,需要一堆煩人的依賴項,有時已經過時了。我的腳本應該做我認為ubuntu腳本所做的事情- 使用 chrome 包並提取外掛,因此可以合法地重新分發。

一旦它弄清楚它在做什麼,它需要將東西複製到鉻安裝等,使用與此類似的複制命令(這在我的 Fedora 21 機器上執行良好):

sudo cp -riv ${tmpdir}/* ${location}/

${tmpdir}可以在哪裡/tmp/tmp.IOfylQBAHT${location}可以在哪裡/usr/lib64/chromium-browser/- 兩者都根據腳本執行的設置和使用的選項而有所不同。通常需要使用兩個或三個複制命令。

我的問題是我認為並非所有系統都使用sudo(有些您必須使用susudo 安裝或設置,並且在某些系統上可能使用者根本沒有 root 權限等),所以我想知道我應該做什麼 - 例如

  • 使用sudo並希望一切順利
  • 使用一些奇怪的東西timeout 2 sudo -v > /dev/null 2>&1,並檢查$?使用者是否可以使用 sudo 以 root 身份執行操作 - 如果他們無法退出並顯示類似消息To finish installation, please run 'cp -riv ${tmpdir}/* ${location}/' as root- 如果可以,請繼續。(如果使用者嘗試使用 sudo,test 命令可能會在一些臭名昭著的“此事件將被報告”的系統上引起問題 - 它也可能會延長使用者的超時時間或其他東西……來源
  • 只需退出後一點的消息*(注意它將被echo編輯,因此它將${tmpdir}用適當的位置替換等)*
  • 確保使用者以 root 身份執行腳本 - 例如:
if [ "$(whoami)" != "root" ]; then echo -e "\e[31mERROR: This needs to be run as root\e[0m"; exit 1 ; fi
  • 別的東西:)

我個人不會對 . 做出任何假設sudo,就像放入sudo腳本是一個壞主意一樣。恕我直言,您的第四個建議(檢查腳本是否以 root 身份執行)是最好的。只是我更喜歡檢查有效的使用者 ID 而不是其名稱:

[ -n "$EUID" ] && [ $EUID -eq 0 ] || <not root, exit>

這將把選擇權留給使用者,使用哪個超級使用者工具來執行您的腳本。

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