【问题标题】:sudo shell script mkdirsudo shell 脚本 mkdir
【发布时间】:2013-02-03 21:37:29
【问题描述】:

myscript.sh 是

#/!bin/sh
mkdir -p $1
cp -p a.txt ./$1
cp b.txt /usr

如果我用 sudo ./myscript.sh 调用它,目录 $1 归 root 所有,因此用户无法修改 a.txt(这是一个问题)。我可以将脚本更改为

#/!bin/sh
mkdir -p $1
cp -p a.txt ./$1
sudo cp b.txt /usr

并仅使用 ./myscript.sh 调用,但我觉得这是不好的做法。在一般情况下如何进行,我不认识用户,所以 chown 没有帮助?

【问题讨论】:

  • 可以从环境变量$USER中获取当前用户。因此,您可以在脚本中使用 chown。
  • @jitendra:我可以在调用脚本之前设置USER=anybody,文件将chown'd 给错误的用户。
  • 你不应该将普通文件复制到/usr;它应该只包含正常事件过程中的目录。为什么你想要一个/usr/b.txt 文件呢?在我看来,好像您将两个单独的任务错误地捆绑为一个。

标签: shell sudo mkdir


【解决方案1】:

SUDO_USER 环境变量由sudo 设置为调用sudo 的用户的名称。您可以将其用于chown

作为不良做法,您不检查任何内容,并且您的 $1 参数替换对于带有空格的文件名会被破坏。如果这些都不重要,你应该关心其余的吗?

【讨论】:

    【解决方案2】:

    你应该添加这一行

    chmod ug+rw a.txt
    

    有了这个,用户将对“a.txt”拥有读/写权限。

    【讨论】:

    • 向文件授予全局写入权限通常是个坏主意。