Cómo conservar las variables de Shell en el script después de cambiar de usuario

Cómo conservar las variables de Shell en el script después de cambiar de usuario

¿Cómo puedo acceder a los mismos datos variables después de cambiar de usuario? Por ejemplo:

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

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

Produce:

/home/user/archive.tar.gz
/

¿Es posible que el segundo echose resuelva de la misma manera que el primero?

Editar: Solución completa, gracias a @Romeo Ninov y @steeldriver:

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

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

Respuesta1

Exportar las variables:

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

Respuesta2

Es posible que desee utilizar zshen lugar de bashwhich tiene soporte para cambiar uids y gids (siempre que se inicie con privilegios de superusuario):

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

Ejecutando 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

La configuración USERNAMEestablece uid, euid, gid, egid y gids complementarios como si iniciara sesión o usara sudo. También puede configurar las variables UID// EUID... GIDindividualmente.

información relacionada