предупреждение терминала при закрытии при открытии в скрипте

предупреждение терминала при закрытии при открытии в скрипте

Во-первых, вопрос: как предупредить пользователя о том, что выполняется скрипт, когда пользователь нажимает кнопку закрытия, а сам терминал (и процесс, работающий в нем) был запущен из командной строки.

У меня есть скрипт, который выполняет действия, которые пользователь захочет отменить до завершения скрипта. Есть оператор read, который приостанавливает процесс, пока пользователь не нажмет [enter]. Но несчастный пользователь время от времени нажимает кнопку закрытия [x] в правом верхнем углу. Я не нашел ловушки, которая перехватывает кнопку закрытия, но предупреждение подойдет. Gnome-terminal предоставляет необходимое предупреждение.

Но, когда gnome-terminal запускается из скрипта (например, пользовательского действия Thunar), эта функция не работает. Для ясности рассмотрим скрипт:

gnome-terminal --command="sh readx.sh"

Где readx.sh содержит одну строку: read x

При нажатии на верхнюю правую кнопку [x] запущенный таким образом терминал закрывается без предупреждения, при этом скрипт все еще активен.

Мне подойдет любой метод отлова или предупреждения.

решение1

Да! Включение приглашения zenity работает хорошо для меня. Когда скрипт выполняется с nohup и включено приглашение zenity, поток будет блокироваться, как и требовалось.

решение2

Вы можете фактически отсоединить ваш процесс readx.shот окна терминала, так что даже если вы закроете окно gnome-terminal, он продолжит работать в фоновом режиме и завершит то, что он должен сделать. Чтобы сделать это, вы должны использовать nohupкоманду - она ​​отключает процесс от терминала, перенаправляет его вывод в nohup.out и экранирует его от SIGHUP.

Я проверил это с помощью следующей команды: gnome-terminal -e "nohup bash ./123.sh" Скрипт 123.shсодержит только sleep 7 && ls -a > 1.txt. Поэтому, когда я запускаю предыдущую команду и закрываю окно gnome-terminal, файл 1.txt все равно создается.

решение3

Я попробовал эту команду, чтобы решить проблему.

Exec=mate-terminal -e "bash -i  -c 'ssh my.server';bash"

Эта команда была протестирована только на mate-terminal, а не на gnome-terminal.

Моя mate-terminalверсия — 1.16.3 на CentOS7.

Связанный контент