Завершить процесс (Например, браузера)
Модератор: Bizdelnick
Re: Завершить процесс
Массив у вас лишняя сущность. Сначала список аргументов скрипта заносится в массив, потом из массива обратно в список — для цикла. Это две лишних операции. Кстати, в скрипте закрытия вы забыли [@]. Предлагаю выкинуть массив как ненужную прокладку.
Спасибо сказали:
Re: Завершить процесс
Вот так по образу и подобию, нужно почти все остальные скрипты "перепилить"...
...
...
Re: Завершить процесс
Спасибо!
Попробую написать , реализовать...
...
Re: Завершить процесс
Если я массивы отброшу, то и [@] добавлять в завершающий скрипт не нужно.
Я массивы отбросил и гуд! ))))))))))
Добавлено (00:30):
На всякий пожарный [с массивами] :Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 3. Cкрипт firefox_222.sh для запуска ПО: браузера Firefox ESR и профилей...
set -x
profiles=($@)
DIR="/tmp"
startfirefox() {
local PID prof
prof=$1
firefox-esr -P "${prof}" &
PID=$!
echo ${PID} >"${DIR}/${prof}.pid"
ls "${DIR}/${prof}.pid"
wait
rm "${DIR}/${prof}.pid"
}
for prof in "${profiles[@]}"
do
if ! [ -f "${DIR}/${prof}.pid" ] ; then
startfirefox "${prof}" &
fi
done
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 3. Cкрипт k_firefox_222.sh для завершения ПО: браузера Firefox ESR и профилей...
set -x
profiles=($@)
DIR="/tmp"
for prof in "${profiles[@]}"
do
if [ -f "${DIR}/${prof}.pid" ] ; then
kill $(cat "${DIR}/${prof}.pid")
fi
done
Re: Завершить процесс
Новые версии скриптов [правда я использовал "костылёк" ] :
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 4. Cкрипт firefox_222.sh для запуска ПО: браузера Firefox ESR и профилей...
# shellcheck disable=SC2046
# shellcheck disable=SC2066
# shellcheck disable=SC2206
# shellcheck disable=SC2128
# shellcheck disable=SC2034 # Unused variables left for readability
set -x
profiles=($@)
DIR="/tmp"
startfirefox() {
local PID prof
prof=$1
firefox-esr -P "${prof}" &
PID=$!
echo ${PID} >"${DIR}/${prof}.pid"
ls "${DIR}/${prof}.pid"
wait
rm "${DIR}/${prof}.pid"
}
for prof in "${profiles}"
do
if ! [ -f "${DIR}/${prof}.pid" ] ; then
startfirefox "${prof}" &
fi
done
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 4. Cкрипт k_firefox_222.sh для завершения ПО: браузера Firefox ESR и профилей...
# shellcheck disable=SC2046
# shellcheck disable=SC2128
# shellcheck disable=SC2066
# shellcheck disable=SC2206
# shellcheck disable=SC2034 # Unused variables left for readability
set -x
profiles=($@)
DIR="/tmp"
for prof in "${profiles}"
do
if [ -f "${DIR}/${prof}.pid" ] ; then
kill $(< "${DIR}/${prof}.pid")
fi
done
- Bizdelnick
- Модератор
- Сообщения: 20798
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Завершить процесс
От разного регистра переменных в глазах рябит. Придерживайтесь единого стиля. Или все в верхнем, или все в нижнем, или глобальные в верхнем, а локальные в нижнем (последний вариант лучше всего, на мой вкус).
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Завершить процесс
Хорошо.Bizdelnick писал: ↑19.04.2023 02:12От разного регистра переменных в глазах рябит. Придерживайтесь единого стиля. Или все в верхнем, или все в нижнем, или глобальные в верхнем, а локальные в нижнем (последний вариант лучше всего, на мой вкус).
Также "костыли" с shellcheck мне убрать нужно. Ибо с этими "заплатками", код правильным
не будет, к сожалению. [Вот уж где в глазах рябит]
...
Re: Завершить процесс
Код: Выделить всё
profiles=($@)
...
for prof in "${profiles}"
Спасибо сказали:
Re: Завершить процесс
Предполагаю, всё по науке в этот раз сделал [правильно]!
А как быть с более старыми версиями лисы и её профилями?
Cкажите, пожалуйста.
Лиса из /opt запускается.
Я вижу: либо условие вкручивать в универсальный скрипт, либо запускать старую лису с её профилем отдельным скриптом [мне 7601 лиса редко нужна...]
Я вижу отдельным скриптом запускать.
Вы, как считаете?
Скажите, пожалуйста.
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 5. Cкрипт firefox_222.sh для запуска ПО: браузера Firefox ESR и профилей...
set -x
profiles=( "$@" )
dir="/tmp"
startfirefox() {
local pid prof
prof=$1
firefox-esr -p "${prof}" &
pid=$!
echo ${pid} >"${dir}/${prof}.pid"
ls "${dir}/${prof}.pid"
wait
rm "${dir}/${prof}.pid"
}
for prof in "${profiles[@]}"
do
if ! [ -f "${dir}/${prof}.pid" ] ; then
startfirefox "${prof}" &
fi
done
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 5. Cкрипт k_firefox_222.sh для завершения ПО: браузера Firefox ESR и профилей...
# shellcheck disable=SC2046
set -x
profiles=( "$@" )
dir="/tmp"
for prof in "${profiles[@]}"
do
if [ -f "${dir}/${prof}.pid" ] ; then
kill $(< "${dir}/${prof}.pid")
fi
done
Добавлено (08:02):
C новой версией лисы и её профилями всё гуд!А как быть с более старыми версиями лисы и её профилями?
Cкажите, пожалуйста.
Лиса из /opt запускается.
Я вижу: либо условие вкручивать в универсальный скрипт, либо запускать старую лису с её профилем отдельным скриптом [мне 7601 лиса редко нужна...]
Я вижу отдельным скриптом запускать.
Вы, как считаете?
Скажите, пожалуйста.
Re: Завершить процесс
А из каких соображений оставили массив? Чем он вам дорог? Циклу ведь нужен простой список с пробелами, который и содержится в $@.
Re: Завершить процесс
Так чтобы наверняка. В смысле, для перестраховки. А ещё shellcheck без массива "ругался"
[где строка с циклом] "Типа нет массива или первого элемента..."
Или я опять всё не так сделал?
...
Re: Завершить процесс
А если название профиля содержит пробелы?
Shell
$ cat test.sh
#!/bin/bash
profiles=("$@")
for prof in "${profiles[@]}"
do
echo "${prof}"
done
Shell
$ ./test.sh f1 "f1 1"
f1
f1 1
Re: Завершить процесс
Да, разница есть, не знал про неё. Но если не использовать промежуточную переменную, то работает и без массива.
Т.е. вот так:
Код: Выделить всё
for prof in "$@"
Спасибо сказали:
Re: Завершить процесс
Я думал, что он абсолютно лишний, т.к. никак не используется. Но раз он позволяет поместить аргументы в другую переменную так, что многословные не разваливаются на части, то от него есть польза. Если зачем-то нужна промежуточная переменная -- например, для лучшей читабельности кода.
А если промежуточная переменная не нужна, то можно просто использовать "$@".
Спасибо сказали:
Re: Завершить процесс
Убрал цикл в скрипте. Результат не такой. Не в столбик, а в строчку "выхлоп"
Что не так?
Что не так?
Код: Выделить всё
#!/bin/bash
profiles=("$@")
prof="${profiles[@]}"
echo "${prof}"
Добавлено (11:35):
Понятно.
Re: Завершить процесс
echo добавляет перевод строки в конец своего вывода. В цикле echo вызывается для каждого аргумента отдельно, поэтому после каждого получается перевод строки. А здесь вызов один для всего списка.
Спасибо сказали:
Re: Завершить процесс
Понял.
Спасибо!
Разобрался.
Добавлено (12:35):
Cовершенно верно:
Код: Выделить всё
#!/bin/bash
profiles=("$@")
for prof in "$@"
do
echo "${prof}"
done
"Выхлоп" в столбик.
Добавлено (13:06):
И теперь спокойно можно остальные скрипты по образу и подобию "перепиливать"!Всё-таки я к массивам склоняюсь...
...
Что касается старой лисы, отдельным скриптом. [Мне раз в пятилетку она нужна] Смысла никакого нет условие вкручивать...
...
Re: Завершить процесс
=> Мне нужно подскрипты подпилить. Для главного труъ скрипта выбора запуска ПО:
Re: Завершить процесс
Да, можно в .xinitrc нужные проги "впилить" А мне вот не нужен никакой софт при запуске, например. Вот почему я со скриптом выбора запуска ПО и заморочился. Также правильный запуск / остановка ПО очень важно...
...
...
Re: Завершить процесс
Всем привет!
Решил по науке свои скрипты "перепилить" / переделать...
Т. е. на каждую софтину создавался файл .PID + каталог в /tmp , например:
Вопрос: мне как сделать - "$HOME/nano_0(1).bash" файл (для редактирования)
[А не "тупо редактор в холостую" запускать]
Скажите, пожалуйста.
Решил по науке свои скрипты "перепилить" / переделать...
Т. е. на каждую софтину создавался файл .PID + каталог в /tmp , например:
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 0. Скрипт: nano_0.bash для запуска текстового редактора nano
set -x
profiles=(nano_0 nano_1)
dir="/tmp/nano_1"
if ! [ -d "${dir}" ] ; then
mkdir "${dir}"
fi
start_nano_0() {
local pid prof
prof=$1
/usr/bin/xterm -e "/bin/nano" &
pid=$!
echo ${pid} >"${dir}/${prof}.pid"
wait
rm "${dir}/${prof}.pid"
}
for prof in "${profiles[@]}"
do
if ! [ -f "${dir}/${prof}.pid" ] ; then
start_nano_0 "${prof}" &
fi
done
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 0. Скрипт: k_nano_0.bash для завершения работы текстового редактора nano
# shellcheck disable=SC2046
set -x
dir="/tmp/nano_1"
for pidfile in "${dir}"/*
do
kill $(cat "$pidfile")
done
sleep 0.5
a='/tmp/nano_1'
printf "\nПросмотр содержимого каталога: /tmp/nano_1\n\n"
ls -la "${a:?}"
printf "\nУдаление содержимого каталога: /tmp/nano_1\n\n"
rm -rf "${a:?}"/*
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 0. Скрипт: nano_1.bash для запуска ткстового редактора nano
set -x
profiles=( "$@" )
dir="/tmp/nano_1"
if ! [ -d "${dir}" ] ; then
mkdir "${dir}"
fi
start_nano_1() {
local pid prof
prof=$1
/usr/bin/xterm -e "/bin/nano" &
pid=$!
echo ${pid} >"${dir}/${prof}.pid"
wait
rm "${dir}/${prof}.pid"
}
for prof in "${profiles[@]}"
do
if ! [ -f "${dir}/${prof}.pid" ] ; then
start_nano_1 "${prof}" &
fi
done
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 0. Скрипт: k_nano_1.bash для завершения работы текстового редактора nano
# shellcheck disable=SC2046
set -x
profiles=( "$@" )
dir="/tmp/nano_1"
for prof in "${profiles[@]}"
do
if [ -f "${dir}/${prof}.pid" ] ; then
kill $(cat "${dir}/${prof}.pid")
fi
done
[А не "тупо редактор в холостую" запускать]
Скажите, пожалуйста.
Добавлено (20:09):
Конечно, можно не nano использовать, а leafpad , например...Re: Завершить процесс
Почти все скрипты по науке перепилил...
Класс!
...
Запускаю, например, "$HOME/lxterminal.bash" 0 1 2 3 6 , но запускается только 0-ой lxterminal
Что не так?
Скажите, пожалуйста.
Эх..! ((((
Скажите, пожалуйста...
...
Класс!
...
Добавлено (19:32):
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 0. Скрипт: lxterminal_1.bash для запуска эмулятора терминала lxterminal
profiles=( "$@" )
dir="/tmp/lxterminalpids"
if ! [ -d "${dir}" ] ; then
mkdir "${dir}"
fi
startlxterminal_1() {
local pid prof
prof=$1
# xterm -xrm 'XTerm.vt100.allowTitleOps: false' -n "${prof}" &
# lxterminal "${prof}" &
#lxterminal -n "${prof}" &
/usr/bin/lxterminal &
# -xrm 'XTerm.vt100.allowTitleOps: false' -e "$HOME/lxterminal.sh" -n "${prof}" &
pid=$!
echo ${pid} >"${dir}/${prof}.pid"
wait
rm "${dir}/${prof}.pid"
}
for prof in "${profiles[@]}"
do
if ! [ -f "${dir}/${prof}.pid" ] ; then
startlxterminal_1 "${prof}" &
fi
done
Код: Выделить всё
#!/bin/bash
#2023xxxx Ver. 0. Скрипт: k_lxterminal_1.bash для завершения работы эмулятора терминала lxterminal
# shellcheck disable=SC2046
profiles=( "$@" )
dir="/tmp/lxterminalpids"
for prof in "${profiles[@]}"
do
if [ -f "${dir}/${prof}.pid" ] ; then
kill $(cat "${dir}/${prof}.pid")
fi
done
Что не так?
Скажите, пожалуйста.
Добавлено (19:55):
В массив только первый элемент попадает...Эх..! ((((
Добавлено (19:59):
Как быть в итоге?Скажите, пожалуйста...
...
Re: Завершить процесс
Сколько бы я lxterminal'ов не запускал через скрипт, то всё к одному процессу и файлу *.pid
сводится...
В принципе, не критично, так как я lxterminal очень редко использую, когда буфер обмена нужен. В основном, xterm использую...
...
...
сводится...
В принципе, не критично, так как я lxterminal очень редко использую, когда буфер обмена нужен. В основном, xterm использую...
...
Добавлено (23:11):
С такой политикой партии - всё шустренько работает + корректный запуск. Корректная остановка ПО......
Re: Завершить процесс
Не только со скрипта - один процесс и файл...
Даже если lxterminal с помощью команды запускать...
...
К счатью, ярлычков во Fluxbox'e нет (и заниматься "извращением" т.е. прикручивать ... создавать не хочу..!)
...
И => скоро с сообществом поделюсь.
Для "слабых и не очень" машинок скрипты запуска актуальны.
И для тех кто "минимализмом болеет..!"
Даже если lxterminal с помощью команды запускать...
...
К счатью, ярлычков во Fluxbox'e нет (и заниматься "извращением" т.е. прикручивать ... создавать не хочу..!)
...
Добавлено (11:35):
Почти всё со скриптами закончил ...И => скоро с сообществом поделюсь.
Для "слабых и не очень" машинок скрипты запуска актуальны.
И для тех кто "минимализмом болеет..!"
Re: Завершить процесс
Если вам требуется 5 терминалов, то есть tmux или tilix.
А для запуска без ярлычков есть dmenu/rofi. Куда вы в том числе можете скрипты добавлять, при большом желании.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Re: Завершить процесс
Спасибо! Нужно потестировать...
...
...