Bash

無法將 crontab -l 的輸出重定向到文件

  • November 1, 2019

我嘗試使用以下命令將我的 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是造成這種情況的原因。

要忠實地重定向控制台輸出,請將輸出保存為字元串,使用引號絕對保留內容,如下所示:

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

或者,根據評論(我想得不夠快,道歉!)

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

這可以防止以任何方式解釋重定向的輸出……例如,您的 crontab 範例開頭的正斜杠。請注意,“echo -e”將解釋轉義序列 - 例如。像 \n、\r、\t 等字元 - 所以使用“echo”而不使用開關。

在大多數係統上,您使用的簡單重定向(crontab -l > 文件名)應該沒問題。

引用自:https://unix.stackexchange.com/questions/549632