Определите отображение в vi, которое вставляет ваш текст из буфера обмена, удаляет все EOL и возвращает его в системный буфер обмена. Таким образом, можно выполнить весь шаг 2 с помощью одного отображения, ведущего к двум, скажем, двум нажатиям клавиш.
Если использование sudo вообще считается хорошей практикой, и если его использование, особенно в коротком сценарии, предназначенном для выполнения вручную, упрощает логику или обслуживание и достигает желаемой цели, тогда я бы сказал, что использование sudo в сценарии уместно, если не предпочтительно.
Внутри скрипта можно использовать sudo и запускать скрипт от имени обычного пользователя. Вызванный sudo обычно запрашивает пароль только один раз (или вообще не запрашивает, если пользователь недавно использовал sudo). Однако для правильного поведения сценарий должен запрещать пользователю запускать его от имени пользователя root.
# This should not be run as root (or using 'sudo')
if [ "$(/usr/bin/id -u)" == "0" ] ; then
echo "This script cannot be run as root (or using 'sudo')!" 1>&2
exit 1
fi
# Use sudo per command here
sudo groupadd docker
sudo gpasswd -a $USER docker
Здесь, поскольку переменная $USER соответствует обычному пользователю, она будет вставлена как ожидаемый аргумент для gpasswd.
Этот пример можно запустить от имени обычного пользователя; не судо. Обратите внимание, однако, что пользователь должен иметь привилегии sudo для правильного выполнения.
Вы можете проверить переменную 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
.