Мне нужна помощь с командой «at»

Эта часть моих сценариев выводит

at: garbled time 

для каждого индекса в цикле, где showRestNotification – это функция, определенная ранее этого вызова

 for i in {0..5} do at ${sleepTimes[$i]} -f showRestNotification done 

где данный

 echo ${sleepTimes[0]} 

результат выглядит

 05/06/17 19:15 

Как переформатировать мою переменную так, чтобы она работала с командой? Мне нужна дата, чтобы остаться, поскольку это необходимо для функции моего скрипта.

Редактировать:

функция sleepTimes

 generateSleepTimes() { oldIFS=$IFS IFS=: splitTime=(${wakeUpTime##*-}) wakeUpHours=${splitTime[0]} wakeUpMinutes=${splitTime[1]} if [[ "$OSTYPE" == "linux-gnu" ]]; then currentHours=$(date +'%H') currentMinutes=$(date +'%M') elif [[ "$OSTYPE" == "darwin"* ]]; then currentHours=$(gdate +'%H') currentMinutes=$(gdate +'%M') fi if [[ $wakeUpHours -lt $currentHours ]]; then IFS=$oldIFS wakeUpTime="$wakeUpTime tomorrow" elif [[ $wakeUpHours -eq $currentHours && $wakeUpMinutes -lt $currentMinutes ]]; then IFS=$oldIFS wakeUpTime="$wakeUpTime tomorrow" else IFS=$oldIFS wakeUpTime="$wakeUpTime today" fi if [[ "$OSTYPE" == "linux-gnu" ]]; then tempTime=$(date -d "$wakeUpTime - 15 minutes" +"%D %H:%M") elif [[ "$OSTYPE" == "darwin"* ]]; then tempTime=$(gdate -d "$wakeUpTime - 15 minutes" +"%D %H:%M") fi if [[ "$OSTYPE" == "linux-gnu" ]]; then sleepTimes[6]=$(date -d "$tempTime" +"%D %H:%M") elif [[ "$OSTYPE" == "darwin"* ]]; then sleepTimes[6]=$(gdate -d "$tempTime" +"%D %H:%M") fi for i in {5..0} do if [[ "$OSTYPE" == "linux-gnu" ]]; then sleepTimes[$i]=$(date -d "${sleepTimes[$i+1]} - 1 hour" +"%D %H:%M") elif [[ "$OSTYPE" == "darwin"* ]]; then sleepTimes[$i]=$(gdate -d "${sleepTimes[$i+1]} - 1 hour" +"%D %H:%M") fi done echo "${sleepTimes[@]}" } 

One Solution collect form web for “Мне нужна помощь с командой «at»”

Ваша команда

 at -f ${sleepTimes[$i]} showRestNotification 

инструктирует запустить ${sleepTimes[$i]} во время showRestNotification .

  1. Спецификация времени искажена, то есть не в формате, распознаваемом на вашей системе.
  2. at чтении со стандартного ввода (или из файла, когда используется -f ).

Вам нужно будет прочитать документацию для вашей системы, чтобы узнать, в каком формате должна быть [[cc]yy]mmddHHMM[.SS] спецификация времени. В моей системе (а не в Linux) она говорит, что она должна быть в формате [[cc]yy]mmddHHMM[.SS] , т.е. 201705061915 за 19:15 6 мая 2017 года.

Кроме того, поскольку at чтении команд для запуска со стандартного ввода (или из файла, когда используется -f ), вам придется предоставить ему сценарий оболочки, содержащий определение функции, которую вы хотите запустить, а также правильное обратитесь к нему, например:

 #/bin/sh # this is "job.sh" showRestNotification () { # ... } showRestNotification 

Затем,

 at -f job.sh -t 201705061915 

или

 at 201705061915 <job.sh 

Поскольку at запуске указанного файла с помощью /bin/sh вам нужно будет вызвать скрипт bash содержащий определение функции и вызов из job.sh если вы хотите использовать конструктивные оболочки bash .


Подсказка портативности для вашего кода:

 date () { case "$OSTYPE" in darwin*) command gdate "$@" ;; linux*) command date "$@" ;; *) printf 'Unsupported OS type: %s\n' "$OSTYPE" >&2 exit 1 ;; esac } 

Тогда просто используйте

 sleepTimes[$i]="$(date -d "${sleepTimes[$i+1]} - 1 hour" +"%Y%m%d%H%M")" 

без необходимости тестировать $OSTYPE повсюду.

  • bashscript для нажатия клавиши со стрелкой вправо
  • Bash - сделать бесконечную работу, ожидая нажатия определенной клавиши - возможно?
  • Как вставить строку в массив по-разному
  • Я пытаюсь подсчитать и распечатать имена файлов песен, используя awk, следующим образом
  • Как я могу временно заменить одну команду на другую?
  • regex - найти недопустимый символ
  • скрипт для запоминания dir и всегда cd к нему вместо корневого каталога
  • Найти все размеры и ширину файлов изображений в каталоге
  • Как запустить sh из файла sh
  • Выход из сценария оболочки, если некоторые дочерние процессы завершаются
  • используя цикл «for», непрерывно читает строку строки за строкой, рассматривая каждую строку как входной
  • Interesting Posts

    Перенаправить трафик на определенный веб-сайт

    Чтобы найти размер некоторой группы файлов

    Что делает эта команда dd точно?

    Как преобразовать установщик .run в .deb Installer?

    Измените ключ, который показывает предыдущие командные строки в ksh

    Запустите приложение с подсказками декоратора окна, координатами x / y, размером и т. Д.

    Объясните этот скрипт bash: echo "$ {1 ## *.}"

    Лучшие варианты установки жесткого диска Mac OS X на моем Linux-боксе?

    Bash: переменная по умолчанию с заменой команды

    Выполнение скрипта на удаленном сервере, содержащемся на стороне клиента

    Капли Wi-Fi, это действительно сложно автоподключить? Малина Pi с Octopi / Octoprint

    сортировка имен файлов численно, когда у них есть нечисловой префикс

    HOSTAPD выходит из строя без остановки и отбрасывает клиентов

    Какой редактор можно использовать для выделения выделенных файлов проекта Mallard?

    Совместное использование X-сервера (сеанса) на компьютерах

    Linux и Unix - лучшая ОС в мире.