yumをrootとして実行し、残りのスクリプトは呼び出し元として実行するスクリプトを作成する方法

yumをrootとして実行し、残りのスクリプトは呼び出し元として実行するスクリプトを作成する方法

yumを使用していくつかのDocker関連ユーティリティをインストールするbashスクリプトがあり、当然yumにはsudoアクセスが必要です。だから、次のようにスクリプトを実行します。

sudo ./myscript.sh

しかし、スクリプトが完了すると、私のユーザーはrootに変わります。これは、スクリプトの最後でこれを実行しているユーザーを次のようにDockerグループに追加したいので、これが問題になります。

groupadd docker
gpasswd -a $USER docker

したがって、スクリプトが完了すると、現在のユーザーではなくグループにルートが追加されます。これは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"

ベストアンサー1

このSUDO_USER変数をチェックして、スクリプトが実行されていることを確認できます。渡す sudoはい、どのユーザーが実行したのか。次に、以下で使用してくださいgpasswd

gpasswd -a "${SUDO_USER}" docker

または

gpasswd -a "${SUDO_USER-$USER}" docker

USERせずに戻りたい場合SUDO_USER

ログインを終了させるコマンドroot(厳密に言えば、ログインは変更されず、新しいシェルが実行されます)は次のとおりです。

newgrp docker

この問題を解決するには、つまりメインチームとしてdocker自分自身の方法で管理する必要がありますsudo

su "${SUDO_USER}" -c "newgrp docker"

そうします。

このようにスクリプトを終了すると、newgrp新しいプロンプトを受信したときにスクリプトが次のように終了しないことを意味します。

  • 入力時にシェルsudo ./myscript.sh
    • sudo
      • シェルが実行中ですmyscript.sh
        • newgrp
          • シェルはdockerデフォルトグループで始まります。

スクリプトは、起動したシェルを終了したときにのみ終了しますnewgrp

おすすめ記事