Завершить процесс (Например, браузера)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

ormorph писал(а):
29.05.2023 23:55
У вас в условии присваивание вместо сравнения...
Мало того, что у меня "индусский код" , так ещё и с ошибками!((((((((

Поэтому, буду использовать такой стиль:

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

#!/bin/bash

opts+=('Запуск менеджера буфера обмена parcellite [выполнение скрипта parcellite_0.bash]')
scripts+=("$HOME/parcellite_0.bash")

opts+=('Завершение работы менеджера буфера обмена parcellite [выполнение скрипта k_parcellite_0.bash]')
scripts+=("$HOME/k_parcellite_0.bash")

# и т. д.

select opt in "${opts[@]}"; do
  for (( i=0; i<${#opts[@]}; i++ )); do
    if [ "$opt" = "${opts[$i]}" ]; then
      "${scripts[$i]}" && echo "Выполнен скрипт ${scripts[$i]}" || echo "Ошибка при выполнении ${scripts[$i]}"
      break
    fi
  done
done

Ещё раз, пользотелю Bizdelnick огромное спасибо!
Добавлено (01:20):
Посмотрел я тут Яндекс браузер и ..., лучше FF ничего нет для меня..!
Давным-давно "поделку от батюшки Гугла оценил!" :) - Такой монстр! Сейчас, даже представить страшно..!
Вот про орегу :) , т.е. Opera ничего не скажу, ибо не юзал ...
Про остальные браузеры тоже ничего не скажу, так как их не использовал...
...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Завершить процесс

Сообщение Bizdelnick »

igor@igor писал:
29.05.2023 23:31
Как / почему врёт??
igor@igor писал:
28.05.2023 08:10

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

               elif [ "$opt" = "$parc_0" ]; then
                 printf "\nВыполнен cкрипт: parcellite_0.bash\n"
                "$HOME/parcellite_0.bash"
и т. п.
igor@igor писал:
29.05.2023 23:31
Где sleep'ы?
igor@igor писал:
28.05.2023 08:10

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

               if [ "$opt" = "$buf_cx_exit" ]; then
                printf "\nЗавершение работы скрипта: buf_cx.sh выполнено успешно\n"
		sleep 3
                exit
igor@igor писал:
28.05.2023 08:10

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

               elif [ "$opt" = "$k_zx_buf_cx" ]; then
                 printf "\nВыполнен скрипт: k_zx_buf_cx.bash\n\n"
                 sleep 3
                "$HOME/k_zx_buf_cx.bash"
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

А нет, скажу:
Текстовый браузер Links2 :)
Вот где минимализм!
А если links2 -g , то вообще "круто!" :)
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

ormorph писал(а):
29.05.2023 23:55
igor@igor писал:
29.05.2023 23:31
Как / почему врёт??
У вас в условии присваивание вместо сравнения...
Пользователь Ormorph объяснил мне. => Ему тоже огромное спасибо..!


...
Добавлено (02:04):
Bizdelnick писал:
30.05.2023 01:28
Где sleep'ы?
А я не въехал про sleep'ы сначала, извините.
Sleep'ы я использовал, чтобы перестраховаться в завершении / прибитии процесса // скрипта.
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Завершить процесс

Сообщение ormorph »

igor@igor писал:
30.05.2023 01:50
Пользователь Ormorph объяснил мне. => Ему тоже огромное спасибо..!
Знать бы ещё что я там такое объяснил. Как правило сравнение это ==, а присваивание =. Но для оператора if действуют правила из man test, по этому просто = тоже работает. Но если смотреть на эстетку, то предпочтительно использовать == в if, для избежания путаницы.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Завершить процесс

Сообщение Bizdelnick »

ormorph писал(а):
30.05.2023 08:13
Как правило сравнение это ==, а присваивание =. Но для оператора if действуют правила из man test, по этому просто = тоже работает.
Всё не так. Для оператора if ничего не работает. Для него имеет значение только код возврата команды. Команда чаще всего используется либо [ (синоним test), либо [[ (составная команда bash), но может быть и любая другая. А как каждая из них обрабатывает оператор = или == — это отдельная история.
ormorph писал(а):
30.05.2023 08:13
Но если смотреть на эстетку, то предпочтительно использовать == в if, для избежания путаницы.
Нет. В случае [ или test лучше использовать =, потому что это единственный вариант, предусмотренный стандартом. Так сохраняется переносимость этой части скрипта. В случае чисто башевского [[ уже можно руководствоваться эстетическими соображениями, поскольку там = и == — синонимы. Но эстетика у каждого своя, мне вот больше нравится =.
Главное — не забывать, что в [ и [[ этот оператор имеет разный смысл.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Завершить процесс

Сообщение ormorph »

Bizdelnick писал:
30.05.2023 10:38
поскольку там = и == — синонимы.
Ну в bash == можно использовать с обоими вариантами скобок, а вот =~, можно использовать только с двойными скобками [[. Ну и регулярки работают только с двойными скобками.
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1379
ОС: Slackware

Re: Завершить процесс

Сообщение UnixNoob »

Bizdelnick писал:
30.05.2023 10:38
Главное — не забывать, что в [ и [[ этот оператор имеет разный смысл.
По-моему там главное не забывать пробелы между знаком равно и переменными и в кавычки их брать. Я по-крайней мере привык что в других ЯП не так критично число пробелов между присваиваниями и бывает забываюсь :)
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Завершить процесс

Сообщение Bizdelnick »

UnixNoob писал:
30.05.2023 13:06
По-моему там главное не забывать пробелы между знаком равно и переменными и в кавычки их брать. Я по-крайней мере привык что в других ЯП не так критично число пробелов между присваиваниями и бывает забываюсь
Тут нужно помнить то, о чём я писал выше: что [, что [[ — просто команды, а операторы сравнения — их аргументы, как и сравниваемые значения. Аргументы разделяются пробелами. Общее правило простое, запоминать частные случаи смысла не имеет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Завершить процесс

Сообщение ormorph »

Bash конечно хорошая вещь, но только кода понадобилось парсить целую кучу json файлов и скачивать в несколько потоков(40 - 80) понял что в python это сделать можно меньшими усилиями. В смысле bash для этого не очень то и годится, так как список файлов более 700000. В этом деле в pyton удобнее работать с процессами.
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

igor@igor писал:
30.05.2023 01:50
У вас в условии присваивание вместо сравнения...
Вот это, Вы, мне Ormorph и объяснили.
Добавлено (22:45):
По делу:

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

#!/bin/bash
#2023xxxx Ver. 7. Скрипт: buf_cx.sh для запуска ПО по выбору.

opts+=('Запуск менеджера буфера обмена parcellite [выполнение скрипта: parcellite_0.bash]')

scripts+=("$HOME/parcellite_0.bash")

opts+=('Завершение работы менеджера буфера обмена parcellite [выполнение скрипта: k_parcellite_0.bash]')

scripts+=("$HOME/k_parcellite_0.bash")

opts+=('Запуск менеджера буфера обмена parcellite2 [выполнение скрипта: parcellite_1.bash]')

scripts+=("$HOME/parcellite_1.bash")

opts+=('Завершение работы менеджера буфера обмена parcellite2 [выполнение скрипта: k_parcellite_1.bash]')

scripts+=("$HOME/k_parcellite_1.bash")

opts+=('Запуск менеджеров буфера обмена parcellite и parcellite2 [выполнение скрипта: parcellite_0_1.bash]')

scripts+=("$HOME/parcellite_0_1.bash")

opts+=('Завершение работы менеджеров буфера обмена parcellite и parcellite2 [выполнение скрипта:           k_parcellite_0_1.bash]')

scripts+=("$HOME/k_parcellite_0_1.bash")

opts+=('Запуск хранителя экрана: xscreensaver-demo и менеджера буфера обмена: parcellite2 [выполнение      скрипта: sv_xscreensaver_2.sh]')

scripts+=("$HOME/sv_xscreensaver_2.sh")

opts+=('Завершение работы хранителя экрана и parcellite2 [выполнение скрипта: k_sv_xscreensaver_2.sh]')

scripts+=("$HOME/k_sv_xscreensaver_2.sh")

opts+=('Запуск хранителя экрана: xscreensaver-demo [выполнение скрипта: sv_xscreensaver.sh]')

scripts+=("$HOME/sv_xscreensaver.sh")

opts+=('Завершение работы хранителя экрана: xscreensaver-demo [выполнение скрипта: k_sv_xscreensaver.sh]')

scripts+=("$HOME/k_sv_xscreensaver.sh")

opts+=('Просмотр состояния DPMS [выполнение скрипта: xset_sost.sh]')

scripts+=("$HOME/xset_sost.sh")

opts+=('Отключение DPMS с помощью xset [выполнение скрипта: xset.sh]')

scripts+=("$HOME/xset.sh")

opts+=('Завершение процесса xset [выполнение скрипта: k_xset.sh]')

scripts+=("$HOME/k_xset.sh")

opts+=('Подскрипт для запуска ПО по выбору [выполнение скрипта: zx_buf_po.bash]')

scripts+=("$HOME/zx_buf_po.bash")

opts+=('Завершение процесса: zx_buf_po.bash [выполнение скрипта: k_zx_buf_po.bash]')

scripts+=("$HOME/k_zx_buf_po.bash")

opts+=('Память [выполнение скрипта: free.sh]')

scripts+=("$HOME/free.sh")

opts+=('Запуск эмулятора терминала lxterminal [выполнение скрипта: lxterminal_0.bash]')

scripts+=("$HOME/lxterminal_0.bash")

opts+=('Завершение работы эмулятора терминала lxterminal [выполнение скрипта: k_lxterminal_0.bash]')

scripts+=("$HOME/k_lxterminal_0.bash")

opts+=('Запуск эмулятора-/-ов терминала xterm [выполнение скрипта: xterm_0.bash]')

scripts+=("$HOME/xterm_0.bash")

opts+=('Завершение работы эмулятора-/-ов_терминала xterm [выполнение скрипта: k_xterm_all.bash]')

scripts+=("$HOME/k_xterm_all.bash")

opts+=('Запуск ФМ MC [выполнение скрипта: mc_0.bash]')

scripts+=("$HOME/mc_0.bash")

opts+=('Завершение работы ФМ MC [выполнение скрипта: k_mc_0.bash]')

scripts+=("$HOME/k_mc_0.bash")

opts+=('Завершение процесса: zx_buf_cx.bash [выполнение скрипта: k_zx_buf_cx.bash]')

scripts+=("$HOME/k_zx_buf_cx.bash")

opts+=('Завершение работы скрипта: buf_cx.sh')

scripts+=("$HOME/exit.sh")



#!/bin/bash

#opts+=('Запуск менеджера буфера обмена parcellite [выполнение скрипта parcellite_0.bash]')

#scripts+=("$HOME/parcellite_0.bash")

#opts+=('Завершение работы менеджера буфера обмена parcellite [выполнение скрипта k_parcellite_0.bash]')
#scripts+=("$HOME/k_parcellite_0.bash")

# и т. д.

select opt in "${opts[@]}"; do
  for (( i=0; i<${#opts[@]}; i++ )); do
    if [ "$opt" = "${opts[$i]}" ]; then
      "${scripts[$i]}" && echo "Выполнен скрипт ${scripts[$i]}" || echo "Ошибка при выполнении ${scripts[$i]}"
      break
    fi

#    if [ "$opt" != "${opts[$i]}" ]; then

                clear
#               printf "\nВы, ввели неверное значение! Пожалуйста, попробуйте еще раз!\n"
#               fi

  done
done

Я скрипт подпилил...
А как сообщение неправильного ввода организовать? ( Где printf ; у меня ошибки и поэтому я закоментировал...)
И как выход из скрипта buf_cx.sh организовать?
Скажите, пожалуйста.
Добавлено (23:05):
Простецкий подскрипт - exit.sh

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

/bin/sh
...

exit



Не завершает скрипт buf_cx.sh
Как быть? Скажите, пожалуйста.
Спасибо сказали:
countmein
Сообщения: 56

Re: Завершить процесс

Сообщение countmein »

Если имеется в виду завершение одного скрипта другим, то его нужно не вызывать, а вставлять -- через source. Иначе он свой процесс завершает. Ну или, может, киллить родителя через его пид.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Завершить процесс

Сообщение Bizdelnick »

igor@igor писал:
31.05.2023 22:19
А как сообщение неправильного ввода организовать?
Введите переменную для статуса команды, перед break меняйте её значение. Если по завершении цикла её значение не изменилось — значит, ввод был неверным.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

countmein писал:
01.06.2023 06:44
Если имеется в виду завершение одного скрипта другим, то его нужно не вызывать, а вставлять -- через source. Иначе он свой процесс завершает. Ну или, может, киллить родителя через его пид.
Спасибо! Именно это я имел ввиду про exit
Значит, нужно ещё "поэкспериментировать" !
Добавлено (13:21):
Bizdelnick писал:
01.06.2023 13:16
Введите переменную для статуса команды, перед break меняйте её значение. Если по завершении цикла её значение не изменилось — значит, ввод был неверным.
Спасибо!
"Попилю")))
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1379
ОС: Slackware

Re: Завершить процесс

Сообщение UnixNoob »

igor@igor
Смотрите, что есть для dmenu:

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

#!/usr/bin/env bash

# dmenu theming
lines="-l 20"
font="-fn Inconsolata-13"
colors="-nb #2C323E -nf #9899a0 -sb #BF616A -sf #2C323E"

selected="$(ps -a -u $USER | \
            dmenu -i -p "Type to search and select process to kill" \
            $lines $colors $font | \
            awk '{print $1" "$4}')"; 

if [[ ! -z $selected ]]; then

    answer="$(echo -e "Yes\nNo" | \
            dmenu -i -p "$selected will be killed, are you sure?" \
            $lines $colors $font )"

    if [[ $answer == "Yes" ]]; then
        selpid="$(awk '{print $1}' <<< $selected)"; 
        kill -9 $selpid
    fi
fi

exit 0
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
igor@igor
Сообщения: 1374
ОС: Debian GNU/Linux, wheezy-amd64

Re: Завершить процесс

Сообщение igor@igor »

"Самопал" поинтересней будет! :)
Спасибо сказали:
Ответить