Como preservar variáveis ​​​​shell no script após alterar o usuário

Como preservar variáveis ​​​​shell no script após alterar o usuário

Como posso acessar os mesmos dados variáveis ​​​​após trocar de usuário? Por exemplo:

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

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

Produz:

/home/user/archive.tar.gz
/

É possível que o segundo echoresolva no mesmo caminho que o primeiro?

Editar: Solução completa, graças a @Romeo Ninov e @steeldriver:

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

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

Responder1

Exporte as variáveis:

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

Responder2

Você pode querer usar zshem vez de bashwhich tem suporte para alteração de uids e gids (desde que seja iniciado com privilégios de superusuário):

#! /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)

Executando como:

$ 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

A configuração USERNAMEdefine uid, euid, gid, egid e gids complementares como se estivesse fazendo login ou usando sudo. Você também pode definir as variáveis UID​​/ EUID/ GID... individualmente.

informação relacionada