我希望 crontabroot
是不可知的,即我不想在其中逐字指定 admin 用户是jim
。这就是为什么在我的 crontab 中root
引入了变量au
。
SHELL=/bin/bash
PATH=/usr/bin:/bin:/usr/sbin:/sbin
au=$(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g')
5 */4 * * * /home/"${au}"/sync-w-oumaima.sh
* * * * * echo "$au">"/home/${au}/${au}.log"
遗憾的是,它不起作用——/home/jim/jim.log
不是由 crontab 创建的。如何在 crontab 中声明和使用保存管理员用户帐户名称的变量?
该
crontab
格式允许您定义环境变量,但不执行任何替换。在您的示例中,au
变量定义为string$(echo "$(head -n 1 /etc/doas.conf)"|sed 's/permit//;s/as//;s/root//;s/ //g')
。最简单的解决方案是在 crontab 中显式定义用户:
另一个解决方案是编写一个简单的脚本来设置
au
变量并运行“真实”命令并从 crontab 运行该脚本:第三种解决方案是使用
eval
shell 内置命令让 shell 重新解释变量的内容au
,例如:但你必须格外小心所需的转义(我当然不小心)。
首先,改进查找(admin用户)的命令
au
。您可以在 crontab 中使用它
当您需要滚动查看命令时,您的命令太长。当你有更多相似的线条时,它就会变得一团糟。为什么不创建
/usr/local/bin/get_admin_user
:接下来,在 crontab 中获取该文件