回答:
次のように、現在のユーザーのcrontabの下部に行をエコーできます。
#!/bin/bash
line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
cron
変更されたシステムに通知する必要があります。
crontab
そのユーザーがまだ存在しない場合、これもエラーになると思います(?)
crontabの値を編集する場合は、次の行に沿って何かを行うことができます。
$ crontab -l | sed -e 's/foo/bar/' | crontab -
明らかに、変更したい行にのみ一致するように、置換に注意する必要があります。それ以外の場合はすべてfoos
に変更されますbars
(この例では)。
この方法の利点は、crontab全体を置き換えないことです。(ハンマーではなく比meta的なピンセット。)
sedの代わりに任意の編集コマンドを使用できます。たとえば、edを使用して、次のように始まる行を修正する場合:
2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1
この行は多くの行の中にあるか、異なるシステムで更新するための多くの異なるcrontabがあり、その行がその用語を含む唯一の行になると知っているとしましょうflitch
。
次のようになります。
$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...
さて、ほぼ100%の時間でedが行うことをsedが行うことを認めなければなりませんが、スイスアーミーナイフに追加のツールを用意することは常に良いことです。^。^