无法将 crontab -l 的输出重定向到文件

无法将 crontab -l 的输出重定向到文件

我尝试使用以下命令将我的 Crontab 备份到文件:crontab -l > backup/crontab。但这只会在目录中创建空文件backup,并且不会将输出打印到终端。该命令的退出代码是0

如果我crontab -l不进行重定向,我会得到预期的输出:

/5 * * * * /path/to/script
...

为什么我的命令无法将 Crontab 内容写入文件,我应该做什么才能使这项工作正常进行?

我正在使用 Centos7.7并安装了以下版本的 Cron 软件包:

crontabs-1.11-6.20121102git.el7.noarch
cronie-1.4.11-23.el7.x86_64
cronie-anacron-1.4.11-23.el7.x86_64

我用的外壳是GNU bash, version 4.2.46.

编辑:

[user@host ~]$ crontab -l > backup/crontab
[user@host ~]$ ll backup
total 248K
drwx------. 28 user user 4,0K 31.10. 09:30 .
drwxr-xr-x.  7 user user 4,0K  1.10. 12:58 ..
-rw-rw-r--.  1 user user 0    31.10. 09:30 crontab
...

备份是本地目录并具有以下 Selinux 策略:staff_u:object_r:user_home_t:s0.

编辑2:

crontab -l > /tmp/crontab工作和其他位置,我也有写访问工作,但当目标位于我的主目录内时,它会失败。我想知道是否selinux是造成这种情况的原因。

答案1

要忠实地重定向控制台输出,请将输出保存为字符串,并使用引号绝对保留内容,如下所示:

echo "$(crontab -l)" > backup/crontab

或者,根据评论(我考虑得不够快,抱歉!)

printf "%s\n" "$(crontab -l)" > backup/crontab

这可以防止以任何方式解释重定向的输出...例如, crontab 示例开头的正斜杠。请注意,“echo -e”将解释转义序列 - 例如。像 \n、\r、\t 等字符 - 所以使用不带开关的“echo”。

在大多数系统上,您使用的简单重定向(crontab -l > 文件名)应该就可以了。

相关内容