Мой ответ аналогичен ответу Гнука, но я считаю, что у меня есть лучшее объяснение «Почему?»
Когда вы говорите в… -f /path/to/my/script.sh
,
вы указываете на
читать /path/to/my/script.sh
.
Он где-то копирует ваш скрипт (возможно, где-то в / var / spool / cron
)
так что atd
, демон заданий at
, может передать содержимое скрипта в / bin / sh
.
На данный момент строка #! / Bin / bash
she-bang - это просто комментарий,
и ваше использование [[…]]
является ошибкой.
Вы хотите не передавать по адресу
содержимое вашего скрипта,
но дайте ему имя ,
$ echo /path/to/my/script.sh | at 1:30 am today
или
$ at 1:30 am today /path/to/my/script.sh Ctrl+D
Таким образом, / bin / sh
увидит /path/to/my/script.sh
и выполнит его как команду.
И затем строка she-bang выполнит свою работу, вызывая вызов bash
.
P.S. В моем ответе (как и в ответе Гнука) есть "особенность", заключающаяся в том, что
если вы измените сценарий с сегодняшнего дня до 1:30 утра,
atd
запустит измененную версию.
(Это отличается от вашего подхода с использованием -f
,
где в
создает копию вашего скрипта при запуске в
.)
В частности, если вы удалите или переименуете скрипт, ничего не запустится.
Если вы проверите man поверх
, вы увидите, что у него есть флаг -c
, например top
, который покажет полную командную строку, используемую для запуска программы:
c Show the command line of the process.
Per process the following fields are shown: process-id, the occu‐
pation percentage for the choosen resource and the command line
including arguments.
Итак, либо запустите ее с флагом:
atop -c
Либо нажмите c в интерактивном в верхнем окне
.