Linux
更改使用者後如何在腳本中保留shell變數
切換使用者後如何訪問相同的變數數據?例如:
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 和 gids
zsh
的而不是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
Setting
USERNAME
設置 uid、euid、gid、egid 和補充 gid,就像登錄或使用sudo
. 您還可以單獨設置UID
// … 變數EUID
。GID