使用 sudo -u在 shell 脚本中运行命令

使用 sudo -u在 shell 脚本中运行命令

我非常懒,更喜欢编写脚本来自动编译软件。对我来说,由于这些脚本可能会很长,因此以 root 身份运行它们会更容易,但以非特权用户身份编译单个软件(因此 sudo -u )。我过去已经能够做到这一点,但现在遇到了一个问题,因为条件没有被评估。因此,类似:

sudo -u name if [ ! -f $HOME/file ];then echo "file not found";fi

令我窒息……就在then……我怎样才能解决这个问题?

答案1

你可以做:

sudo -H -u name bash -c '[ -f "$HOME"/file ] || echo "file not found"'

[ -f "$HOME"/file ] || echo "file not found"完全按照您想要的方式进行操作if..then

man sudo

-H,--设置主页

请求安全策略将 HOME 环境变量设置为目标用户的密码数据库条目指定的主目录。根据策略,这可能是默认行为。

答案2

您当前的 shell 会看到分号并sudo在那里结束命令;因此, sudo 只能看到if [ ! -f $HOME/file ].建议:

  1. 转义特殊字符,或者
  2. 引用整个 sudo 命令(未经测试),或者
  3. 将命令放入(临时的,如果需要的话)shell 脚本中,并将 sudo 指向该脚本。

相关内容