【问题标题】:Shell script error: How would I change a permission on a file in a Shell scriptShell 脚本错误:如何更改 Shell 脚本中文件的权限
【发布时间】:2018-02-11 04:06:40
【问题描述】:

我正在尝试在多台 AWS EC2 机器上设置一个 cron,并希望使用以下 shell 脚本一次在所有机器上运行一个命令:

#!/bin/sh       
cd /etc/cron.daily
touch ecs.sh
echo '#!/bin/sh' > /etc/cron.daily/ecs.sh
echo 'sudo yum update -y ecs-init' >> /etc/cron.daily/ecs.sh
echo 'sudo yum update -y' >> /etc/cron.daily/ecs.sh     
sudo chmod 755 /etc/cron.daily/ecs.sh       
cd ~
(crontab -u root -l; echo '0 0 * * * /etc/cron.daily/ecs.sh') | crontab -u root -
sudo yum update -y  

不起作用的部分是:chmod 755 /etc/cron.daily/ecs.sh 我不确定,我错过了什么。

【问题讨论】:

  • “不起作用”是什么意思?就像...脚本执行完成后,您查看该文件的权限,它不是-rwxr-xr-x?你真的需要在这里sudo 你的chmod 命令吗?
  • @JNevill 它没有按预期运行。 -rwxr-xr-x 这没有发生。它在没有sudo 的情况下工作 sudo 不是通过假设 root 用户或超级用户的角色来执行命令的最安全方式吗?
  • touch ecs.sh 在这个脚本中是多余的,sudo 会要求你输入密码。
  • 如果你使用sudo,它会询问你的密码,除非你已经配置sudoers允许你在没有密码的情况下使用chmod
  • 但是由于您是文件的所有者,您不需要使用超级用户权限来更改权限。

标签: bash shell cron


【解决方案1】:

如果您可以(有足够的权限)创建文件,则无需sudo 将其权限更改为0755。这也可能会提示您输入密码并以非交互方式运行,这可能是该操作未发生的原因。

另一方面,如果运行它的用户没有必要的(写入)权限,则前面创建文件的行也不会发生。

您也不需要触摸文件,因为> 重定向会创建它(总是一个新的)。

您也不应该在某处cd 并继续执行操作而不检查目录是否已按预期更改。但由于除了不必要的 touch 之外的所有操作都使用绝对路径名,因此您也可以省略两个 cd 行。

如果您清理脚本并且它仍然没有执行预期的操作,那么保存其输出(重定向标准 >(或 1>) 和错误(@ 987654329@) 输出到文件)并检查它是否有错误。

【讨论】:

    最近更新 更多