По команде: номер задания
Я пишу сценарий 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