让我们来判断一下代码.
for i in $(cat users.txt); do
sudo -u USERNAME_$i echo "$(echo '* 1 * * * some_command_2' ; crontab -l 2>&1)" | crontab
done
第一个是sudo
.您将以超级用户身份执行第一个echo
.你的bash
将首先决定需要给sudo
提供什么论点.最后一个参数是"$(echo '* 1 * * * some_command_2' ; crontab -l 2>&1)"
,您自己的用户ID下的shell 将在将其作为参数提供给sudo
之前对其进行扩展.如果你加上id
,你就可以很容易地看到这一点.
sudo echo "$(echo '* 1 * * * some_command_2' ; crontab -l 2>&1 ; id)"
这将显示id
是在您自己的ID下执行的.
下一个可能的问题是您的用户ID列表中的users.txt
个.sudo
获得的所有用户都以USERNAME_
为前缀.这不太可能(尽管有可能)是你想要的.
第三个问题是第二个crontab
.这也是在您自己的用户ID下执行的,从而将所有的Stuf添加到您自己的crontag中.这也不是你想要的.
大约sudo
:sudo does not以新用户的身份运行该行的其余部分,只运行紧随其后的命令.
那么,如何解决这一问题呢?
go 掉无用的echo
,sudo
必须做的用crontab -u
.
所以这大概是这样的:
for name in $(cat users.txt); do
(echo '* 1 * * * some_command_2' ; sudo crontab -lu "$name") | sudo crontab -u "$name"
done
这可能会奏效.