Bash

如何創建以 root 身份執行 yum 的腳本,但其餘腳本以呼叫使用者身份執行

  • June 2, 2017

我有一個 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.

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