启动文件(/etc/crontabs/root
(:
# do daily/weekly/monthly maintenance
# min hour day month weekday command
*/15 * * * * run-parts /etc/periodic/15min
0 * * * * run-parts /etc/periodic/hourly
0 2 * * * run-parts /etc/periodic/daily
0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly
我想复制此文件,删除注释。。。并将内容添加到同一个文件中,所以我运行:
sed '/^#/ d; s//etc//root/etc/' /etc/crontabs/root >> /etc/crontabs/root
应该删除所有注释,将/etc
替换为/etc/root
。。。并将结果添加到同一文件中。
错误输出(请注意以*/15
开头的"额外"行(:
# do daily/weekly/monthly maintenance
# min hour day month weekday command
*/15 * * * * run-parts /etc/periodic/15min
0 * * * * run-parts /etc/periodic/hourly
0 2 * * * run-parts /etc/periodic/daily
0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly
*/15 * * * * run-parts /root/etc/periodic/15min
0 * * * * run-parts /root/etc/periodic/hourly
0 2 * * * run-parts /root/etc/periodic/daily
0 3 * * 6 run-parts /root/etc/periodic/weekly
0 5 1 * * run-parts /root/etc/periodic/monthly
*/15 * * * * run-parts /root/root/etc/periodic/15min
预期/想要的输出:
# do daily/weekly/monthly maintenance
# min hour day month weekday command
*/15 * * * * run-parts /etc/periodic/15min
0 * * * * run-parts /etc/periodic/hourly
0 2 * * * run-parts /etc/periodic/daily
0 3 * * 6 run-parts /etc/periodic/weekly
0 5 1 * * run-parts /etc/periodic/monthly
*/15 * * * * run-parts /root/etc/periodic/15min
0 * * * * run-parts /root/etc/periodic/hourly
0 2 * * * run-parts /root/etc/periodic/daily
0 3 * * 6 run-parts /root/etc/periodic/weekly
0 5 1 * * run-parts /root/etc/periodic/monthly
想法?
您不应该向正在读取的同一个文件进行写入。它将读取您添加到文件中的行,并继续处理它们。因此,当它到达具有/root/etc
的行时,它将替换其中的/etc
,从而产生/root/root/etc
。它可能会陷入无限循环,因为它一直在扩展文件,永远不会到达最后。
您可以做的是将crontab
文件复制到一个新文件中,然后使用sed
附加到该文件中。
cp /etc/crontabs/root /tmp/new_crontab
sed '/^#/ d; s//etc//root/etc/' /etc/crontabs/root >> /tmp/new_crontab
cp /tmp/new_crontab /etc/crontabs/root
如果您想要一个一行,可以直接使用ed
:
printf "%sn" ka '1,$t' "'a,$g/^#/d" "'a+1,$s//etc//root/etc/" w | ed -s /etc/crontabs/root
或者使用heredoc更容易阅读:
ed -s /etc/crontabs/root <<'EOF'
ka
1,$t
'a,$g/^#/d
'a+1,$s//etc//root/etc/
w
EOF