사용자 변경 후 스크립트에서 쉘 변수를 유지하는 방법

사용자 변경 후 스크립트에서 쉘 변수를 유지하는 방법

사용자를 전환한 후 동일한 변수 데이터에 액세스하는 방법은 무엇입니까? 예를 들어:

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대신 uid 및 gid 변경을 지원하는 것을 사용할 수도 있습니다 bash(수퍼유저 권한으로 시작된 경우).

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

설정 USERNAMElogin 또는 use와 마찬가지로 uid, euid, gid, egid 및 보조 gid를 설정합니다 . // ... 변수를 개별적으로 sudo설정할 수도 있습니다 .UIDEUIDGID

관련 정보