So behalten Sie Shellvariablen im Skript bei, nachdem Sie den Benutzer geändert haben

So behalten Sie Shellvariablen im Skript bei, nachdem Sie den Benutzer geändert haben

Wie kann ich nach einem Benutzerwechsel auf dieselben Variablendaten zugreifen? Beispiel:

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

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

Produziert:

/home/user/archive.tar.gz
/

Ist es möglich, dass der zweite echoim selben Pfad wie der erste aufgelöst wird?

Bearbeiten: Komplette Lösung, danke an @Romeo Ninov und @steeldriver:

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

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

Antwort1

Exportieren Sie die Variablen:

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

Antwort2

zshSie können anstelle von Folgendes verwenden: bashDas Programm unterstützt das Ändern von UIDs und GIDs (vorausgesetzt, es wird mit Superuser-Berechtigungen gestartet):

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

Wird ausgeführt als:

$ 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

Die Einstellung USERNAMElegt die uid, euid, gid, egid und zusätzlichen gids fest, als ob Sie sich anmelden oder verwenden würden sudo. Sie können die Variablen UID/ EUID/ GID... auch einzeln festlegen.

verwandte Informationen