Как Chris Down, я собираюсь предположить, что Вы используете удар GNU. Другие оболочки могут отличаться, но общее представление должно быть тем же.
В ударе, переменной среды $$
содержит идентификатор процесса в настоящее время рабочего процесса, и $PPID
содержит идентификатор процесса родителя рабочего процесса. Поскольку Chris иллюстрировал, можно пойти еще больше, но/proc является определенным для Linux.
Можно спросить пользователя, выйти ли из использования конструкции как следующее.
echo "Do you want to exit? (type YES or NO, then Enter)"
read answer
if test "${answer}" = "YES"; then
# insert process killing magic
fi
# we only get here if the user did not answer "YES"
Если это доступно, можно использовать GNU dialog
сделать вопрос немного более симпатичным. В этом случае замените весь отрывок выше чем-то как следующее.
if dialog --yesno "Do you want to exit?" 10 50; then
# insert process killing magic
fi
# we only get here if the user did not answer "YES"
Числа 10 50
укажите размер диалогового окна (строки и столбцы, соответственно).
process killing magic
могло быть что-то столь же простое как kill $PPID
.
Я предполагаю, что Вы подразумеваете, что хотите уничтожить интерактивную оболочку, от которой был разветвлен сценарий. Я также предполагаю, что та оболочка bash
.
При определении источника сценария в той оболочке просто используйте exit
. Иначе отправить SIGABRT
(или другой сигнал, который заставит удар выходить) к родительскому pid (интерактивная оболочка) при помощи чего-то вроде этого:
kill -ABRT "$PPID"
Или, в оболочках без $PPID
(это - конкретный Linux):
read -r _ _ _ ppid _ < "/proc/$$/stat"
kill -ABRT "$ppid"