Как сохранить переменные оболочки в скрипте после смены пользователя

Как сохранить переменные оболочки в скрипте после смены пользователя

Как я могу получить доступ к тем же данным переменных после переключения пользователей? Например:

artifact=archive.tar.gz
workdir=/home/user

echo "$workdir/$artifact"
sudo -u otheruser bash
echo "$workdir/$artifact"

Производит:

/home/user/archive.tar.gz
/

Возможно ли, что вторая echoпроблема разрешится тем же путем, что и первая?

Редактировать: Полное решение, спасибо @Romeo Ninov и @steeldriver:

export artifact=archive.tar.gz
export workdir=/home/user

echo "$workdir/$artifact"
sudo -Eu otheruser bash
echo "$workdir/$artifact"

решение1

Экспортируйте переменные:

export artifact=archive.tar.gz
export workdir=/home/user

решение2

zshВместо этого вы можете использовать , bashкоторый поддерживает изменение uid и gid (при условии, что он запущен с привилегиями суперпользователя):

#! /bin/zsh -
id
echo "Original user: $SUDO_USER"
var=test
(
  USERNAME=$SUDO_USER
  echo "Runing as $(id -un) in this subshell var=$var"
)
(USERNAME=nobody; echo and now:; id; echo $var)

Работает как:

$ sudo ./that-script
uid=0(root) gid=0(root) groups=0(root)
Original user: stephane
Runing as stephane in this subshell var=test
and now:
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
test

Настройка USERNAMEустанавливает uid, euid, gid, egid и дополнительные gid, как при входе в систему или использовании sudo. Вы также можете задать переменные UID/ EUID/ GID... по отдельности.

Связанный контент