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
。