Как запустить скрипт, не закрывая терминал?


69

У меня есть скрипт в файле, bla.shи он исполняемый. Когда я нажимаю на него, скрипт выполняется и окно закрывается. Я бы хотел, чтобы окно оставалось открытым .

Что-то вроде команды cmd /k** commandв Windows.

PS Я не хочу использовать pause, но хочу написать больше команд после выполнения скрипта.

Ответы:


81

Поместите $SHELLв конце вашего сценария:

альтернативный текст

Небольшой недостаток: поскольку gnome-terminalон не работает bashкак оболочка, он будет рассматривать его как приложение и отображать предупреждение об этом при попытке закрыть терминал:

There is still a process running in this terminal
Closing the terminal will kill it.

Я не нашел хорошего способа скрыть это предупреждение. Если вы хотите, вы можете полностью отключить его, запустив:

gconftool --set /apps/gnome-terminal/global/confirm_window_close --type boolean false

Этого не происходит, если вы используете xtermвместо gnome-терминала; если это вас беспокоит.


20
Вы можете использовать exec $SHELLвместо того, $SHELLчтобы просто убрать предупреждение без изменения настроек.
Андреа Корбеллини

1
Но это решение создает дополнительную оболочку / процесс. Можно ли этого избежать?
lucasvc

Я не знаю, как это сделать, нет. Проблема заключается в том, что вы теряете свой дескриптор при стандартном вводе-выводе после завершения первого процесса bash, поэтому вам придется проделать некоторую хитрость с демоном, который передает эти дескрипторы, который будет более подвержен ошибкам и раздражает.
Стефано Палаццо

10

Использование терминала Gnome

Использование добавления gnome-терминала; bash в конце командной строки и вызов сценария с опцией -c. Например:

gnome-terminal -e "bash -c ~/script.sh;bash"

Это делает следующее:

  1. открывает гном-терминал
  2. выполняет скрипт script.sh
  3. показывает приглашение bash после завершения скрипта.

Вы можете выйти из окна терминала gnome, закрыв окно или набрав в командной строке bash команду exit. Или вы можете ввести больше команд по запросу.



7

Если у вас есть доступ к сценарию, вы также можете добавить следующий код в конце:

read

Этот код будет ждать ввода перед закрытием, поэтому терминал будет оставаться открытым, пока вы не нажмете Enter.


1
Я часто использую bashв конце, но readпозволяет мне закрыть окно только с ctrl+cили enter, вместо ctrl+shift+wили alt+f4. Это удобно, когда вы быстро повторяете свой сценарий.
августа

5

Используйте bash«S --init-fileварианта с временной трубой:

bash --init-file <(echo './<script_name>')

Пример:

bash --init-file <(echo './bla.sh')

2

Использование xtermи добавление ;bashв конце командной строки работает. Например:

xterm -e "bash ~/script.sh;bash"

Это делает следующее:

  1. открывает xterm
  2. выполняет скрипт script.sh
  3. показывает приглашение bash после завершения скрипта.

Вы можете выйти из окна xterm, закрыв окно или набрав exitв командной строке bash. Или вы можете ввести больше команд по запросу.


1
xterm -e bash --rcfile bla.sh

Это запустит скрипт в новом окне и даже даст вам контроль над окном после его завершения.

Однако новое окно не будет загружаться ~/.bashrcкак обычно, так как bla.shвместо этого мы запустили . Это можно исправить, поставив

. ~/.bashrc

на вершине bla.sh

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.