Bash
安裝腳本 - sudo 授權兼容性?
我目前正在更新一些腳本,併計劃發布一些有用的腳本,以便其他人可以使用它們(因此他們需要在各種機器上工作而不會崩潰,也不會破壞任何東西)。
其中一個在 Fedora 機器上添加了 chromium pepperflash 外掛和其他一些東西——我最初製作腳本是因為russianfedora 的事情在當時看起來不可靠,需要一堆煩人的依賴項,有時已經過時了。我的腳本應該做我認為ubuntu腳本所做的事情- 使用 chrome 包並提取外掛,因此可以合法地重新分發。
一旦它弄清楚它在做什麼,它需要將東西複製到鉻安裝等,使用與此類似的複制命令(這在我的 Fedora 21 機器上執行良好):
sudo cp -riv ${tmpdir}/* ${location}/
${tmpdir}
可以在哪裡/tmp/tmp.IOfylQBAHT
,${location}
可以在哪裡/usr/lib64/chromium-browser/
- 兩者都根據腳本執行的設置和使用的選項而有所不同。通常需要使用兩個或三個複制命令。我的問題是我認為並非所有系統都使用
sudo
(有些您必須使用su
未sudo
安裝或設置,並且在某些系統上可能使用者根本沒有 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>
這將把選擇權留給使用者,使用哪個超級使用者工具來執行您的腳本。