Удалить задания из очереди в указанную дату

Вы можете использовать уловки:

echo " $EVAR"
echo  -e "\055E"
echo $'\055E'

Но, как я уже сказал, это уловки. Реальное решение - всегда использовать printf:

$ printf '%s\n' "$EVAR"
-E
3
30.10.2018, 12:16
2 ответа
atq | awk '/Oct 29/ { print $1 }'

Это напечатает идентификаторы заданий, содержащих строку Oct 29.

Что делает код awk, так это сопоставляет заданное регулярное выражение с каждой из входных строк, и для строк, которые соответствуют ему, печатает первое поле с разделителями пробелами -в строке (идентификатор задания ).

Передача результата этого короткого конвейера в xargs atrmприведет к удалению заданий:

atq | awk '/Oct 29/ { print $1 }' | xargs atrm

Утилита xargsчитает из своего стандартного потока ввода и выполняет данную утилиту с прочитанным аргументом. Если есть много аргументов (, вероятно, нет, в этом случае ), xargsутилита может выполняться несколько раз.

5
27.01.2020, 21:11

Вы можете просто передать вывод atqи немного его обработать:

atrm $( atq | grep 'Oct 29' | cut -d' ' -f 1 | tr '\n' ' ' )

Что делается:

  • grep Oct 29из atqвывод
  • выберите только первые поля, используя cutи используя пробел в качестве разделителя
  • сделать символы новой строки пробелами, используяtr

Это дает вам только номера заданий atв одной строке, которые затем могут быть вашим вводом для atrm.

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

 atq | grep 'Oct 29' | cut -d' ' -f 1 | tr '\n' ' '
2
27.01.2020, 21:11

Теги

Похожие вопросы