ユーザーを変更した後もスクリプト内のシェル変数を保持する方法

ユーザーを変更した後もスクリプト内のシェル変数を保持する方法

ユーザーを切り替えた後に同じ変数データにアクセスするにはどうすればよいでしょうか? 例:

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

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

生産:

/home/user/archive.tar.gz
/

echo2 番目が 1 番目と同じパスで解決される可能性はありますか?

編集: 完全な解決策です。@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代わりに、bashuid と 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設定することもできます。UIDEUIDGID

関連情報