Як запустити скрипт, не закриваючи термінал?


69

У мене є сценарій у файлі, bla.shі він виконується. Коли я натискаю на нього, сценарій виконується і вікно закривається. Я хотів би, щоб вікно залишалося відкритим .

Щось на зразок команди cmd /k** commandв Windows.

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

Відповіді:


81

Помістіть $SHELLв кінці сценарію:

alt текст

Невеликий недолік: оскільки 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-terminal; якщо це вас турбує


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

1
Але це рішення створює додаткову оболонку / процес. Чи можна цього уникнути?
lucasvc

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

10

Використання терміналу Gnome

Використання додавання gnome-terminal; bash в кінці командного рядка та виклик сценарію за допомогою параметра -c працює. Наприклад:

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

Це робить наступне:

  1. відкриває gnome-термінал
  2. виконує скрипт script.sh
  3. показує підказку bash після закінчення сценарію.

Ви можете вийти з вікна терміналу gnome, закривши вікно або введіть вихід у рядку bash. Або ви можете ввести більше команд за запитом.



7

Якщо у вас є доступ до сценарію, ви можете також додати наступний код наприкінці:

read

Цей код буде чекати введення до закриття, тому термінал залишатиметься відкритим, поки ви не натиснете Enter.


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

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.