以root身份运行脚本时获取用户主目录

Pet*_*r-W 28 bash shell

我有一个需要以root身份运行的sh脚本,但是它由最终用户使用sudo运行.当使用sudo运行时〜/指向/ root时如何获取用户主目录?

Mic*_*jer 42

尽量避免使用eval.特别是根烫发.

你可以做:

USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
Run Code Online (Sandbox Code Playgroud)

更新:

就是为什么要避免使用eval.

  • @bunnyDrug`eval`是不安全的,因为它在参数扩展后执行结果字符串.`FOO ="bob; ls"; eval"echo $ FOO"`只打印一个单词:"bob",然后执行`ls`.现在用更邪恶的东西取代`ls`. (7认同)
  • 如果你希望它始终有效,无论用户是否使用 sudo 运行,你可以使用 `USER_HOME=$(getent passwd ${SUDO_USER:-$USER} | cut -d: -f6)` (2认同)

dog*_*ane 28

用户的主目录是~$SUDO_USER.您可以使用eval如下:

USER_HOME=$(eval echo ~${SUDO_USER})
echo ${USER_HOME}
Run Code Online (Sandbox Code Playgroud)

  • 尽量避免使用"eval".没有'eval`,请看我的答案. (2认同)
  • 是的,您确实需要“eval”,因为用户存储在变量中。 (2认同)

glg*_*lgl 8

$ sudo env |grep USER
USER=root
USERNAME=root
SUDO_USER=glglgl
Run Code Online (Sandbox Code Playgroud)

所以你可以访问$SUDO_USER并询问系统的homedir getent passwd $SUDO_USER | cut -d: -f6.