Может быть, с помощью команды at
?
at -M -f $ script_name now + $ time minute
В базовых определениях POSIX есть раздел « Соглашения об утилитах », который применяется к базовым утилитам POSIX.
Стандартная утилита getopts
и системный интерфейс getopt ()
(«функция C») придерживаются рекомендаций (далее на странице, ссылка на которую приведена выше) при синтаксическом анализе команды. строка в сценарии оболочки или программе C. В частности, для getopts
(в качестве примера):
Когда встречается конец параметров, утилита
getopts
должна выйти с возвращаемым значением больше нуля; переменная оболочкиOPTIND
должна быть установлена на индекс первого операнда или значение«$ #» +1
, если операндов нет; переменнаяname
должна быть установлена на символ. Любое из следующего должно определять конец опций: первый аргумент-
, который не является аргументом-опцией, обнаружение аргумента, который не является аргументом-опцией и не начинается с-
или возникла ошибка.
По сути, это означает, что сначала должны идти параметры, а затем операнды (ваша «команда или файл»).
Выполнение этого любым другим способом сделало бы невозможным использование getopts
или getopt ()
и, кроме того, могло бы дополнительно запутать пользователей, привыкших к POSIX-способу определения параметров и операндов для команды.
Обратите внимание, что вышеупомянутый стандарт применяется только к утилитам POSIX, но как таковой он устанавливает приоритет для утилит Unix в целом. Нестандартные утилиты Unix, очевидно, могут следовать этому правилу или нарушать его.
Например, GNU coreutils, даже несмотря на то, что они реализуют стандартные утилиты, допускает такие вещи, как
$ ls Documents/ -l
, если переменная среды POSIXLY_CORRECT
не установлена, тогда как версия BSD тех же утилит не .
Это приводит к тому, что следующее работает должным образом (если вы ожидаете поведения POSIX, то есть) в системе BSD:
$ touch -- 'test' '-l'
$ ls -l test -l
-rw-r--r-- 1 kk kk 0 Jan 11 16:44 -l
-rw-r--r-- 1 kk kk 0 Jan 11 16:44 test
Но в системе GNU coreutils вы получаете
$ ls -l test -l
-rw-r--r-- 1 kk kk 0 Jan 11 16:44 test
Однако:
$ env POSIXLY_CORRECT=1 ls -l test -l
и
$ ls -l -- test -l
будет делать «правильные» вещи и в системе GNU.
Все три библиотеки синтаксического анализа параметров, с которыми я работал в python default , чтобы разрешить перемежающиеся аргументы и предоставить иллюстрацию того, что является общим:
Теперь устаревшая стандартная библиотека python модуль optparse
позволяет:
OptionParser.enable_interspersed_args ()
Настроить синтаксический анализ, чтобы не останавливаться на первом не-параметре, позволяя перемежать переключатели с аргументами команд. Это поведение по умолчанию.
Текущий модуль стандартной библиотеки Python argparse
разрешает (и разрешает только) перемежающиеся аргументы.
click
, библиотека, которую я сейчас предпочитаю, позволяет отключить перемежающихся аргументов :
click.Context (allow_interspersed_args = False)
Но обсуждает это возможность в расширенном разделе при устранении неполадок неизвестные аргументы подкоманд .