Linux

更改使用者後如何在腳本中保留shell變數

  • January 23, 2019

切換使用者後如何訪問相同的變數數據?例如:

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"

導出變數:

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

您可能希望使用支持更改 uids 和 gidszsh的而不是which(前提是它以超級使用者權限啟動):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

SettingUSERNAME設置 uid、euid、gid、egid 和補充 gid,就像登錄或使用sudo. 您還可以單獨設置UID// … 變數EUIDGID

引用自:https://unix.stackexchange.com/questions/495977