Как предотвратить закрытие терминала при завершении программы, с которой он был запущен?

Как предотвратить закрытие терминала при завершении программы, с которой он был запущен?

Если я запускаю терминал (любой терминал, например urxvt) как urxvt -e sleep 5, то запускается новый терминал, но через 5 секунд терминал закрывается, потому что sleepпрограмма завершилась. Как мне запустить терминал с программой в командной строке, но оставить терминал активным после завершения этого процесса?

На практике, что я хотел бы сделать, это urxvt -e tmux new-session top, который открывает urxvt с запущенной сессией tmux top. Но когда я нажимаю q, topзавершается, что также приводит к завершению tmux и urxvt. Я хотел бы, topчтобы при выходе я попадал в оболочку внутри tmux.

решение1

Терминал (tmux) закрывается, когда он выполняет команду, которую вы ему сказали выполнить. Если вы хотите выполнить topи затем интерактивную оболочку, вам нужно сказать ему сделать это. Объединение команд — это работа оболочки, поэтому запустите промежуточную оболочку (которая не является интерактивной) и скажитеэтодля последовательного выполнения двух команд.

urxvt -e tmux new-session sh -c 'top; "$SHELL"'

решение2

Одна из возможностей:

gnome-terminal -e sh -c "sleep 5; bash"

Суть в том, чтобы запустить оболочку ( bashв данном случае) после того, как ваша начальная команда завершится. К сожалению, простое gnome-terminal -e 'sleep 5; bash'невозможно, поскольку все предложение sleep 5; bashинтерпретируется как одна команда.

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