W przypadku programu uruchamiającego dla aplikacji terminalowej, jak mogę utrzymać terminal otwarty po zakończeniu programu?

24

Mam polecenie terminalu uruchamiane z programu uruchamiającego aplikacje. Działa to świetnie, jednak czasami polecenie kończy się niepowodzeniem, więc chciałbym, aby terminal pozostawał otwarty, aby mógł zobaczyć wyniki. W jaki sposób mogę to zrobić?

Eugene M.
źródło

Odpowiedzi:

23

Zakładając, że twoje polecenie zostało wywołane mycommand, zmienię mój program uruchamiający, aby uruchomić to:

gnome-terminal -e "mycommand|less"

Jeśli chcesz bardziej trwałego, być może czystszego rozwiązania, otwórz terminal gnome, przejdź do Edycja, Preferencje profilu i kliknij kartę Tytuł i polecenie. Zmień opcję „Po wyjściu polecenia” na „Przytrzymaj terminal otwarty”.

Podczas wykonywania poleceń powinien on pozostawić terminal otwarty, gdy coś się uruchomi.

Edycja: Jeśli tak naprawdę nie zależy ci na terminalu, możesz po prostu użyć flagi wstrzymania xterm:

xterm -e "mycommand" hold
Oli
źródło
7
Aby zachować domyślną akcję terminala „po wyjściu komendy”, sugeruję utworzenie nowego profilu terminala, pozostawienie otwartego po wyjściu komendy i przekazanie opcji gnome-terminal --tab-with-profile=PROFILENAME. W ten sposób możesz mieć wiele profili dla różnych zachowań :-)
odwróć
1
xterm -hold -e mycommand
8

Twój program uruchamiający uruchamia skrypt, prawda?

Na końcu skryptu dodaj

read -p "Press any key to exit > " -n1 junk
echo 

Następnie skrypt będzie czekać, aż zdecydujesz się go zakończyć.

Richard Holloway
źródło
1
+1 i aby wyświetlić monit tylko w przypadku niepowodzenia polecenia (zwraca niezerowy kod wyjścia), można to zrobićcommand || read -n1 -p "Command failed. Press any key to exit..."
Jukka Matilainen
8

Użyj tego w skrócie .desktop

Exec=gnome-terminal -x bash -c "YOUR_SCRIPT; exec $SHELL"

Po zakończeniu skryptu proces Bash zastąpi się nowym wywołaniem samego siebie.

Jeśli potrzebujesz przekazać argumenty cytowane do skryptu, musisz uciec od cudzysłowów:

Exec=gnome-terminal -x bash -c "YOUR_SCRIPT \"arg with spaces\"; exec $SHELL"
mivk
źródło
3

Nieco inne podejście niż w przypadku innych odpowiedzi: uruchom polecenie, a jeśli to się nie powiedzie, odradzaj powłokę. W ten sposób nie musisz trzymać terminala otwartego (co nie rozróżnia między sukcesem a niepowodzeniem komendy) i możesz uznać tę powłokę za szczególnie przydatną w razie awarii. Aby go zamknąć, po prostu użyj Ctrl-D (EOF), „exit”, Alt-F4 (lub cokolwiek innego, czego używa twój menedżer okien do zamykania okien) itp.

powodzenie lub sukces

#!/bin/sh
[ $# -eq 0 ] && {
  echo "$(basename $0): no command" >&2
  exit 1
}
"$@" || {
  echo "failed: $?"
  exec $SHELL
}

Umieść ten plik gdzieś, na przykład ~ / bin, a następnie użyj „sukces-lub-shell swoje oryginalne polecenie” w programie uruchamiającym.


źródło
0

Ta odpowiedź daje najlepszą odpowiedź, jaką do tej pory widziałem, na robienie tego, co chcesz. Zalecają wykonanie skryptu z poleceniami do wykonania i użycie go z parametrem --init-file (specyficznym dla bash, ale prawdopodobnie możesz zrobić to samo dla csh / tcsh / zsh itp.):

#!/bin/bash --init-file
commands to run

... i wykonaj go jako:

xterm -e /path/to/script
# or
gnome-terminal -e /path/to/script
# or
the-terminal -e bash --init-file /path/to/script/with/no/shebang
Brian Vandenberg
źródło
0

Użyj watchpolecenia.

Format: watch -n60 myCommandlubwatch -n60 "my command string"

  • -npodano liczbę sekund oczekiwania między wywołaniami MyCommand ; np .: powyższe polecenie wywoła myCommand co 60 sekund, na zawsze.
  • Jeżeli polecenie jest wiele słów, umieścić go wewnątrz cudzysłowów: "my command string".

Powiedzmy, że potrzebujesz programu uruchamiającego, który wyświetla użycie dysku i pozostaje otwarty dla czytelnika. Po prostu użyłbym tego polecenia w programie uruchamiającym:,
watch -n60 "df -h"który wywołuje df -hteraz co 60 sekund.

Podoba mi się to w stosunku do zaakceptowanej odpowiedzi, gnome-terminal -e "mycommand|less"ponieważ korzystam z Xubuntu, który domyślnie używa innego terminala.

Gabriel Staples
źródło
0

Spróbuj kliknąć program uruchamiający prawym przyciskiem myszy i wprowadzić właściwości.

Powinna istnieć opcja utrzymania otwartego okna terminala wprowadź opis zdjęcia tutaj

W pliku .desktop powinien znajdować się wpis X-KeepTerminal=true

nathanfranke
źródło