bash-4.1$ cat file
1.351364711.103.7319660.2010-01-01 00:00:00
1.345529841.103.7372875.2010-01-01 00:00:49
1.342955629.103.7455272.2010-01-01 00:01:42
1.339694956.103.7520503.2010-01-01 00:02:28
bash-4.1$ awk -F. '{print $NF,$1"."$2,$3"."$4}' OFS=, file
2010-01-01 00:00:00,1.351364711,103.7319660
2010-01-01 00:00:49,1.345529841,103.7372875
2010-01-01 00:01:42,1.342955629,103.7455272
2010-01-01 00:02:28,1.339694956,103.7520503
Скорее всего, ваша вторая попытка верна, но ваше ожидание неверно.
Давайте рассмотрим его по частям:
crontab -l
перечисляет все существующие записи для crontab текущего пользователя.
echo "1 * * * * /usr/bin/firefox"
просто снова печатает эту строку. Затем эти две команды группируются в подоболочке, а общий вывод направляется в
crontab -
Таким образом, crontab перезаписывается тем, что поступает через стандартный ввод, который в данном случае представляет собой старый crontab плюс новую запись.
Как вы сказали, он добавляется в файл crontab. И, если запущен демон cron, команда будет выполняться каждую минуту.
Так почему же вы не видите окно Firefox каждую минуту? -Поскольку conrjob запускается в другой оболочке ниже демона cron, который не имеет доступа к вашему X-сеансу, поэтому firefox завершится ошибкой и сообщит что-то вроде
(firefox:22376): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Error: GDK_BACKEND does not match available displays
И прекратить. Как увидеть эту ошибку? Обычно демон cron попытается отправить вам письмо, см. /var/spool/mail
.
О двух формах:
{ crontab -l; echo "1 * * * * /usr/bin/firefox" } | crontab -
должно быть записано как
{ crontab -l; echo "1 * * * * /usr/bin/firefox"; } | crontab -
(обратите внимание на лишнюю точку с запятой)
Разница между ()
и {}
заключается в том, что первый создает оболочку подчиненного -, тогда как последний выполняет команды в том же контексте оболочки. Таким образом, присвоение переменных сохраняется в одной форме, но не в другой.
Я получал ту же ошибку при попытке запустить firefox-esr
из задания cron.
Установка DISPLAY
прямо в файле cron помогла:
* * * * * pi export DISPLAY=:0 && /usr/bin/firefox-esr &
(Обязательно узнайте свой настоящий DISPLAY
номер, выполнивecho $DISPLAY
)