it-swarm.dev

Jak spustit skript bez uzavření terminálu?

Mám skript v souboru bla.sh a je spustitelný. Když na to klikn, spustí se skript a okno se zavře. Chtěl bych okno zůstat otevřené.

Něco jako příkaz cmd /k** command ve Windows.

P.S. I not chci použít pause, ale po spuštění skriptu chci psát více příkazů.

74
UAdapter

Dát $Shell na konci skriptu:

alt text

Malá chyba: od gnome-terminal neběží bash, protože je to Shell, bude to považovat za aplikaci a zobrazí varování o tom, když se pokusíte zavřít terminál:

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

Našel jsem žádný pěkný způsob, jak skrýt toto varování. Pokud chcete, můžete ji zcela zakázat spuštěním:

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

To se nestane, pokud místo gnome-terminal používáte xterm; kdyby vás to trápilo.

88
Stefano Palazzo

Pomocí terminálu Gnome

Pomocí připojení terminálu gnome; bash na konci příkazového řetězce a volání skriptu s volbou -c funguje. Například:

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

To dělá následující:

  1. otevírá terminál gnome
  2. spustí skript script.sh
  3. po dokončení skriptu se zobrazí výzva k bash.

Okno gnome-terminal můžete ukončit zavřením okna nebo zadáním exit na bash Prompt. Nebo můžete podle potřeby zadat více příkazů.

13
Karsvo

Pokud máte přístup ke skriptu, můžete na konec přidat také následující kód:

read

Tento kód bude čekat na vstup před zavřením, takže terminál zůstane otevřený, dokud nestisknete Enter.

8
jaycode

Použijte bash 's --init-file možnost s dočasným potrubím:

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

Příklad:

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

Pokud používáte xterm použijte -hold.

7
Ramy

Pomocí xterm a připojením ;bash na konci příkazového řetězce funguje. Například:

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

To dělá následující:

  1. otevírá xterm
  2. spustí skript script.sh
  3. po dokončení skriptu se zobrazí výzva k bash.

Okno xterm můžete ukončit zavřením okna nebo zadáním exit na výzvu bash. Nebo můžete podle potřeby zadat více příkazů.

2
Karsvo
xterm -e bash --rcfile bla.sh

Tím se skript spustí v novém okně a po dokončení se vám dokonce podaří ovládat okno.

Nové okno se však nenačte ~/.bashrc jako normální, protože jsme běželi bla.sh namísto. To lze napravit uvedením

. ~/.bashrc

na vrcholu bla.sh

2
Steven Penny

Neexistuje odpověď ukazující exec bash jako správná odpověď, ale mělo by být, tak tady to je. Tato odpověď je částečně zapůjčena z @ Karsvoova odpověď , @ Stefano Palazoova odpověď , a @Andrea Corbelliniho komentáře pod Stefanovou odpovědí.

V mém systému echo $Shell ukazuje, že proměnná Shell obsahuje /bin/bash. Proto pomocí bash namísto $Shell je identický. Také jsem zjistil, že všechny tři z nich na konci zůstanou terminál otevřený: bash, eval bash, exec bash, , ale pouze poslední, exec bash, pak vám umožní zavřít terminál bez varování, že proces stále běží. Proto je nejlepší použít exec bash nebo exec $Shell, jak říká @AndreaCorbellini ve svém komentáři.

Tady je to, jak by to mohlo vypadat v případě použití skriptu pro otevření dvou nových gnome-terminal karty již cded do vašeho $ HOME (~) adresář:

gnome-terminal --tab -- bash -ic "cd ~; exec bash;"
gnome-terminal --tab -- bash -ic "cd ~; exec bash;"

Opět můžete použít exec $Shell místo toho také:

gnome-terminal --tab -- bash -ic "cd ~; exec $Shell;"
gnome-terminal --tab -- bash -ic "cd ~; exec $Shell;"

Příbuzný:

  1. Proto jsem tyto informace opravdu potřeboval! - Otevřete terminál s více kartami a spusťte aplikaci
0
Gabriel Staples