По команде: номер задания

Я пишу сценарий Bash, где я использую команду at,

Как я могу получить номер работы, созданной с at? (Для удаления при необходимости.)

Команда на самом деле ничего не возвращает. Я получаю ответ от системы при использовании at в раковине, но я не могу захватить это. Это не исходит от самой команды.

3 ответа

Решение

Я предполагаю, что вы работаете в системе Unix / Linux. Этот ответ был протестирован на машине Solaris Unix. Linux (Red Hat) похож, но формат идентификатора на рабочем месте - это простой короткий номер.

Там нет фактического PID производится до тех пор, пока работа фактически не выполняется, но at job id возвращается к стандартной ошибке.

> at -t 07141116 2> at out < commandfile
> cat at.out
job 1436868960.a at Tue Jul 14 11:16:00 2015

Вы можете проверить его статус с помощью at -l команда

> at -l
1436868960.a    Tue Jul 14 11:16:00 2015

Номер задания печатается at команда, но, к сожалению, она выводится со стандартной ошибкой, а не со стандартным выводом. Таким образом, чтобы захватить его, вам нужно перенаправить его на стандартный вывод.

Следующий фрагмент фиксирует вывод at в переменную. я бегу at в локали C, потому что это может привести к другому выводу на других языках. Если команда завершилась неудачно, я распечатываю захваченное сообщение об ошибке. В противном случае я анализирую вывод, чтобы найти номер задания.

at_output=$(printf %s "$command" | LANGUAGE= LC_ALL=C at "$time" 2>&1)
at_status=$?
if [ "$at_status" -ne 0 ]; then
  echo "at $time failed with status $at_status" >&2
  echo "$at_output"
  exit $at_status
fi
newline='
'
case "$at_output" in
  "job "*) at_job=${at_output#job };;
  *"${newline}job "*) at_job=${at_output#*"${newline}job "};;
  *) echo >&2 "$at_output"; echo >&2 "Unable to determine at job number!";;
esac
at_job=${at_job%% *}

Похоже, что ваша оболочка имеет синтаксическую ошибку (и поэтому сразу перестает работать). Он запускается в командной строке сам по себе? Вы определяете путь в сценарии?

Если ничего другого, вставьте заявление, чтобы повторить идентификатор.

echo PS - это $$ > logfile

Другие вопросы по тегам