crontab -lの出力をファイルにリダイレクトできません。

crontab -lの出力をファイルにリダイレクトできません。

次のコマンドを使用してCrontabをファイルにバックアップしようとしましたcrontab -l > backup/crontab。ただし、これはディレクトリに空のファイルのみを生成backupし、出力を端末に印刷しません。このコマンドの終了コードはです0

リダイレクトしないと、crontab -l予想される出力が得られます。

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

私のコマンドがCrontabの内容をファイルに書き込めないのはなぜですか。これを行うにはどうすればよいですか?

私はCentosを使用しており7.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> filename)を使用できます。

関連情報