Bash
如何創建以 root 身份執行 yum 的腳本,但其餘腳本以呼叫使用者身份執行
我有一個 bash 腳本,它使用 yum 來安裝一些 Docker 相關的實用程序,自然 yum 需要 sudo 訪問。所以我通過以下方式執行腳本:
sudo ./myscript.sh
但是腳本完成後最終將我的使用者更改為root。這對我來說是個問題,因為我希望腳本的末尾通過以下方式將執行它的使用者添加到 Docker 使用者組:
groupadd docker gpasswd -a $USER docker
所以當腳本完成時,它會將 root 添加到組而不是目前使用者 - 我想這是因為我使用 sudo 執行它。
是否可以 sudo 執行腳本但保留目前使用者的登錄名?據我了解,在腳本中使用 sudo 通常不是一個好主意。
這是腳本(在下面的答案後編輯):
#!/bin/bash yum remove docker \ docker-common \ container-selinux \ docker-selinux \ docker-engine yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo yum makecache fast yum install docker-ce systemctl start docker groupadd docker groupadd docker gpasswd -a "${SUDO_USER}" docker su "${SUDO_USER}" -c "newgrp docker"
您可以檢查
SUDO_USER
變數以確定腳本是否正在通過sudo
執行,如果是,則由哪個使用者執行它。然後你就用它在gpasswd
:gpasswd -a "${SUDO_USER}" docker
或者
gpasswd -a "${SUDO_USER-$USER}" docker
如果你想
USER
在沒有SUDO_USER
.導致您最終以身份登錄的命令
root
(嚴格來說,這不會更改您的登錄名,它會執行一個新的 shell)是newgrp docker
要解決這個問題,即最終以自己
docker
為主要組,您需要以自己的身份執行它;假設sudo
,su "${SUDO_USER}" -c "newgrp docker"
會這樣做。
請注意,以
newgrp
這種方式結束腳本意味著當您收到新提示時,您的腳本不會以這種方式結束;結果是
- 鍵入時所處的外殼
sudo ./myscript.sh
sudo
- 執行的外殼
myscript.sh
newgrp
- shell 以
docker
主要組開始該腳本只會在您退出由
newgrp
.