我非常懒,更喜欢编写脚本来自动编译软件。对我来说,由于这些脚本可能会很长,因此以 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 ]
.建议:
- 转义特殊字符,或者
- 引用整个 sudo 命令(未经测试),或者
- 将命令放入(临时的,如果需要的话)shell 脚本中,并将 sudo 指向该脚本。