Пользовательский идентификатор для заданий "at"

Существует простое решение — использовать%%(${var%% *})вместо%(${var% *}). Это удалит все(*)после начального пробела.

$ var='2492  some string continues here'
$ echo "${var%% *}"
2492

Но это не удастся, если строка в var содержит начальные пробелы. Можно удалить начальные пробелы с помощью:

$ var=$' \t 2492  some string continues here  '
$ var="${var#"${var%%[![:space:]]*}"}"
$ echo "$var"
2492  some string continues here  
$ echo "${var%%[[:space:]]*}"
2492

Это работает, даже если белые -пробелы являются пробелами вкладок NL или CR.


Регулярное выражение

Возможно, более надежным решением будет использование регулярного выражения:

$ var=$' \t 2492  some string continues here  '
$ regex='^[[:space:]]*([^[:space:]]+)'
$ [[ $var =~ $regex ]] && var=${BASH_REMATCH[1]}
$ echo "$var"
2492
0
24.02.2020, 20:05
1 ответ

Вы можете получить номер задания для отправки atс помощью такого кода. В примере представлено задание, которое просто спит в течение пяти минут, поэтому вам, очевидно, придется его настроить. Вывод из отправки atпохож на job 1175 at Mon Feb 24 18:28:00 2020, и команда grepсовпадает с этим, чтобы извлечь номер задания

.
job=$( echo "sleep 300" | at now 2>&1 | grep -oP 'job\s+\K\d+' )
echo "The job identifier is $job"

Невозможно определить номер задания до его отправки в at.

0
28.04.2021, 23:22

Теги

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