Страница 1 из 1

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Добавлено: 18 ноя 2018, 00:09
madesta
Задуманная задача представляет из себя реализацию автоматического цикла отбработки команд "запуск приложения - работа - выход из приложения".

В качестве приложения рассматривается клиент Linux appimage облака pCloud. Для его остановки по расписанию планируется использовать команду kill -15 pid_процесса (команда kill -15 срабатывает именно по pid), что соответствует "прошу процесс мягко закрыться".

При работе Linux appimage облака pCloud создаёт несколько процессов:
pcloud-proccesses-1.png
pcloud-proccesses-2.png
Поэтому при определении pid процесса pcloud получается последовательность групп цифр, например: 14682 14661 14632 14620 14616 (получена из команды pidof pcloud> ~/pcloud.txt) Примечание. Если не закрывать все автоматически открывшиеся окна, то таких процессов будет шесть, например: 15282 15254 15233 15204 15192 15188

Экспериментально установлено, что если сделать kill-15 процессу с самым меньшим из полученных значений (то есть из 1-го примера --> kill -15 14616), то задача, в принципе решена. Так как в случае дальнейшего присвоения переменной этого значения, например MYVAR=... , выполняется команда kill -15 $MYVAR и все процессы pcloud "гаснут".

Конкретный вопрос

1) может ли кто-нибудь подсказать как присвоить MYVAR самое последнее значение (14616) из последовательности групп цифр, которые в 1 строку через пробел;
2) или имеется ли способ последовательность 14682 14661 14632 14620 14616 в файле pcloud.txt преобразовать к виду "в столбик"
14682
14661
14632
14620
14616
после чего можно было бы выполнить MYVAR=`sed -n '5p' ~/pcloud.txt`

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Добавлено: 18 ноя 2018, 01:29
slant
Простой способ выловить последнее число из ряда:
echo 14682 14661 14632 14620 14616 | grep -o [0-9]*$
Чтобы загнать это в переменную:
MYVAR=`echo 14682 14661 14632 14620 14616 | grep -o [0-9]*$`
Тоже самое, из файла: MYVAR=`cat ~/pcloud.txt | grep -o [0-9]*$` (подразумевается, что в файле именно строчка а не столбик).

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Добавлено: 18 ноя 2018, 02:11
Chocobo
еще пара вариантов навскидку :smile:

Код: Выделить всё

▶ echo 14682 14661 14632 14620 14616 | awk '{print $NF}'           
14616

Код: Выделить всё

▶ echo 14682 14661 14632 14620 14616 | rev | cut -d' ' -f 1 | rev
14616

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Добавлено: 18 ноя 2018, 03:23
demonlibra
Может быть так будет проще

Код: Выделить всё

killall -s TERM pcloud

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Добавлено: 18 ноя 2018, 16:50
madesta
Благодарю всех откликнувшихся.
Все предложенные варианты приводят к решению поставленной задачи.

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

Полагаю, что следует отметить какое-то сообщение как решение. Я бы и slant, и Chocobo, и demonlibra отметил как "решено", т.е. установить "решено" каждому из участников обсуждения. ПО форума это позволяет сделать?

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Добавлено: 18 ноя 2018, 16:53
rogoznik
madesta писал(а):
18 ноя 2018, 16:50
ПО форума это позволяет сделать?
К сожалению нет. Можешь отметить только одно.

Bash: выбрать из последовательности групп цифр в строке последнюю группу

Добавлено: 18 ноя 2018, 18:40
madesta
Хотя ставлю "решено" первому сообщению, хотелось бы подчеркнуть, что изначально хотел "решено" поставить всем. 3-е сообщение содержит в себе команду выключения всех процессов pcloud. При просмотре в диспетчере задач хода выключений клиента от стандартного (от разработчиков) до предложенных вариантов сделано предположение, что основным, всё-таки, является процесс с наименьшим pid, соответствующему pCloud Drive, а все остальные являются или дочерними или зависимыми. Поэтому выключение по наименьшему значению pid показалось более корректным. Может быть cli версия (https://github.com/pcloudcom/console-client) клиента pCloud и свободна от наличия нескольких процессов, но "хотелка" хотела именно GUI.

Ещё раз всех благодарю, высказанное взято "в копилку рецептов".