用 mkdir 和 chown 中的变量替换显式用户名

用 mkdir 和 chown 中的变量替换显式用户名

为了使用变量 username 和变量 user_home 在当前用户的 home 中创建子目录,然后将新子目录的所有权更改为当前用户,需要在下面的命令中进行哪些具体更改?

我们当前在 GitHub ubuntu-lastest 运行程序中使用的命令太脆弱,因为以下命令使用用户的显式名称:

mkdir /home/runner/mysubdirectory/
sudo chown -R runner:runner /home/runner/mysubdirectory/

该OP询问如何替换/home/runner为当前用户主页的变量声明,以及如何替换runner:runner为当前用户姓名的变量表示。

答案1

你可以这样做:

username=runner
sudo -Hu "$username" sh -c 'mkdir ~/mysubdirectory'

mkdir作为目标用户(以及该用户的主要 gid)从 shell 运行,where$HOME已设置为该用户的主目录,-H因此 where~将扩展到该用户。

或者您可以调用getent来检索用户的信息:

IFS=: read -r name x uid gid gecos home shell < <(
  getent -- passwd "$username") &&
  sudo install -o "$uid" -g "$gid" -d "$home/mysubdirectory"

相关内容