Хотелось бы понять что не так в скрипте sh

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
madesta
Сообщения: 1989
Зарегистрирован: 11 июн 2017, 21:47
Решено: 28
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 425 раз
Контактная информация:

Хотелось бы понять что не так в скрипте sh

#1

20 июл 2019, 22:53

Предысторией вопроса является желание "мягкого" старта autokey-gtk, то есть с задержкой. Желание задержки обусловлено тем, что при простом "Automatically start Autoley at login" в настройках программы временами появляется сообщение, что autokey-gtk запущен, pid процесса имеется, но программа не отвечает. Соответственно, "горячие" клавиши на различные операции не работают.

Для уточнения системы: Linux Mint 18.3 xfce 64 bit

Первоначальное решение с записью в автостарте (Сеансы и запуск - Автозапуск) /home/minter/scripts/autokey.sh

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

#!/bin/bash
sleep 65
autokey-gtk
sleep 10
exit
привело лишь к частичному успеху. Всё отрабатывается, но команда exit не проходит. Процесс autokey.sh остаётся активным.
autokey-sh-exist.png
Пришлось сделать второй скрипт, также запускаемый с задержкой: sh -c "sleep 75 && /home/minter/scripts/autokey-stop.sh"

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

#!/bin/bash
OUTPUT="$(pgrep autokey.sh)"
kill -15 ${OUTPUT}
exit
и в autokey.sh убрать команды sleep 10 и exit. Только тогда после отработки всех команд "лишние" процессы исчезают и остаётся только процесс autokey-gtk, что и является решением этой частной задачи.

Не могу ответить на 2 вопроса.

1. Почему не проходит команда exit в первоначальной версии autokey.sh

2. Почему pidof autokey.sh не возвращает номера pid и чтобы его найти необходима команда pgrep autokey.sh

Может кто из знающих подскажет?

Решение slant » 20 июл 2019, 23:24
madesta писал(а):
20 июл 2019, 22:53
1. Почему не проходит команда exit в первоначальной версии autokey.sh
Потому что скрипт запуская autokey-gtk, ждет его завершения перед исполнением следующей строчки. Чтобы такого не было, попробуйте строчку поменять так: autokey-gtk &
madesta писал(а):
20 июл 2019, 22:53
2. Почему pidof autokey.sh не возвращает номера pid и чтобы его найти необходима команда pgrep autokey.sh
Потому что это скрипт а не программа. pidof вернет pid'ы только полноценных программ которые выполняются в самой системе, а скрипты таковыми не являются. Их исполняет командный интерпретатор (bash или sh скорее всего) - вот для них то pid'ы и будут возвращены, если запросить.

P.S. Есть еще такая команда: killall - ей можно скормить просто имя (а не pid) программы которую нужно прибить (или сигналом дернуть).

Перейти к ответу ➙

Аватара пользователя

slant
Сообщения: 4469
Зарегистрирован: 21 июн 2017, 18:09
Решено: 95
Благодарил (а): 51 раз
Поблагодарили: 1966 раз
Контактная информация:

Хотелось бы понять что не так в скрипте sh

#2

20 июл 2019, 23:24

madesta писал(а):
20 июл 2019, 22:53
1. Почему не проходит команда exit в первоначальной версии autokey.sh
Потому что скрипт запуская autokey-gtk, ждет его завершения перед исполнением следующей строчки. Чтобы такого не было, попробуйте строчку поменять так: autokey-gtk &
madesta писал(а):
20 июл 2019, 22:53
2. Почему pidof autokey.sh не возвращает номера pid и чтобы его найти необходима команда pgrep autokey.sh
Потому что это скрипт а не программа. pidof вернет pid'ы только полноценных программ которые выполняются в самой системе, а скрипты таковыми не являются. Их исполняет командный интерпретатор (bash или sh скорее всего) - вот для них то pid'ы и будут возвращены, если запросить.

P.S. Есть еще такая команда: killall - ей можно скормить просто имя (а не pid) программы которую нужно прибить (или сигналом дернуть).

Аватара пользователя

Dja
Сообщения: 6875
Зарегистрирован: 27 авг 2016, 20:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1310 раз
Поблагодарили: 724 раза
Контактная информация:

Хотелось бы понять что не так в скрипте sh

#3

20 июл 2019, 23:28

По поводу второго вопроса. autokey.sh - всего лишь имя скрипта, а не команда. А команда скорее всего выглядит /bin/bash или что-то вроде того. Откройте htop и найдите по pgrep pidы и гляньте как выглядят команды.
По первому вопросу.
taoist писал(а):Чтоб понять про exit надо понять про autokey-gtk

Аватара пользователя

Автор темы
madesta
Сообщения: 1989
Зарегистрирован: 11 июн 2017, 21:47
Решено: 28
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 425 раз
Контактная информация:

Хотелось бы понять что не так в скрипте sh

#4

20 июл 2019, 23:37

Всем откликнувшимся спасибо. Slant полностью раскрыл суть обоих вопросов. Его предложение о добавлении символа & и приведении команды autokey-gtk к виду autokey-gtk & привело к дальнейшей отработке команды sleep 10 && exit и закрытию процесса autokey.sh Тему, на усмотрение модератора, можно закрывать.

Аватара пользователя

rogoznik
Сообщения: 10015
Зарегистрирован: 27 июн 2017, 13:36
Решено: 128
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1950 раз
Контактная информация:

Хотелось бы понять что не так в скрипте sh

#5

21 июл 2019, 09:33

:close:
ИзображениеИзображение

Закрыто

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей