Вы можете проверить переменную 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
.
Во-первых, было бы проще, если бы вы немного переформулировали свой вопрос. Легко решается с помощью какого-то сценария. Следующее должно работать в сценарии BASH. Запустите его с именем файла в качестве первого аргумента. Например, "./change_name_script.sh hdf5-1.8.18.tar.gz" и он будет работать так, как вы хотите
#!/bin/bash
filename=$1
gunzip < $filename | tar xf -
move_filename=$(echo $filename | sed -r 's/.tar.gz$//')
first_part=$(echo "$move_filename" | sed -r 's/-.*$//')
second_part=$(echo "$move_filename" | sed -r 's/^.*-//')
mkdir $first_part
mv $move_filename $first_part/$second_part
Возможно, вы захотите взглянуть на опцию -C
команды tar
.
tar zxf hdf5-1.8.18.tar.gz -C hdf
разархивирует, распаковает и поместит каталог в каталог hdf/
.