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

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

사용자를 전환한 후 동일한 변수 데이터에 어떻게 접근할 수 있나요? 예를 들어:

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

설정은 USERNAME로그인 또는 를 사용하는 것처럼 uid, euid, gid, egid 및 보충 gid를 설정합니다 sudo. UID/ EUID/ ... 변수를 개별적으로 설정할 수도 있습니다 GID.

관련 정보