Intereting Posts
Удаление каждой строки, которая не является последовательностью из 7 чисел Не удается выйти из полноэкранного режима в терминале Pantheon Прочитайте файл и найдите все вхождения и создайте хэш для содержимого между вхождениями конвертировать одностраничный пейзаж pdf в масштабируемый двухстраничный портрет pdf Расширьте мою LVM после обновления SSD Пользовательский автозаполнение: обрабатывать пробелы в именах файлов получение pid двух последних команд, выполненных в фоновом режиме и выполняющих Xinerama misbehaving – перетаскивание на неправильный экран перемещение папки старше 30 дней в другую папку i686 против ядра i486 на Intel Core i3 Как обеспечить, чтобы пользовательский макрос emacs работал в регионе? Могу ли я создать пакет centos 7 (el7) rpm на сервере centos 6 (el6)? Инструменты для анализа автоматически генерируемых HTTP-индексов? Какое распределение вероятностей моделирует это состояние гонки? Команда восстановления файловой системы после установки ОС

Мне нужна помощь с командой «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[@]}" } 

Ваша команда

 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 повсюду.