Я пытаюсь написать очень минималистическую версию идеи «проглатывания окон», которая могла бы работать с Xterm или любым эмулятором терминала, предоставляющим опцию -e для запуска указанной программы в качестве оболочки терминал.
Я написал следующий скрипт и сохранил его в run.sh и передаю его в Xterm с помощью -e ./run.sh< /p>
Код: Выделить всё
#!/bin/sh
PROG=''
read PROG
($PROG &) && exit
Намерение состоит в том, что окно Xterm откроется, получит имя программы в качестве входных данных от пользователя, запустит программу и разветвит ее, а затем закроется. Проблема в том, что Xterm немедленно закрывается, а указанная программа никогда не открывается. Я предполагаю, что родительский процесс уничтожается до того, как дочерний процесс сможет разветвиться, но я не уверен? Выход && должен гарантировать, что родительский процесс не завершится, пока не получит код успеха от дочернего процесса.
Я изменил сценарий следующим образом, и он ведет себя так, как задумано:
Код: Выделить всё
PROG=''
read PROG
($PROG & sleep 1) && exit
Это подтверждает мою гипотезу. Я хотел бы иметь возможность удалить этот сон, потому что он делает программу очень некрасивой, оставляя исходный Xterm открытым еще на секунду.
Обратите внимание, что программы, с которыми я использую это, являются графическими. (На самом деле я тестирую его, запуская другое окно Xterm), поэтому при запуске они должны открывать свое собственное окно. Я не ожидаю, что программы CLI возьмут на себя управление окном Xterm, поскольку я намерен, очевидно, закрыть его
Подробнее здесь:
https://stackoverflow.com/questions/786 ... ss-exiting