2015-07-13 2 views
1

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

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

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

+0

Пожалуйста, добавьте код, который вы уже пробовали. Это поможет вам намного легче. – ByteNudger

+1

Возможно, вы хотите посмотреть на 'atq' после того, как вы отправили свою работу? – twalberg

+0

Также стоит упомянуть операционную систему, в которой вы работаете. 'at' могут быть реализованы по-разному на разных платформах. – ghoti

ответ

1

Я предполагаю, что вы в системе 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 
-1

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

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

эхо PS является $$> файл_журнала

0

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

Следующий фрагмент отображает вывод 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%% *}