2010-04-02 8 views
19

W moim skrypt powłoki, moje ostatnie linie są:Jak uzyskać plik ".command" Maca, aby automatycznie zamknąć program po uruchomieniu skryptu powłoki?

... 
echo "$l" done 
done 

exit 

mam Terminal preferencji zestaw do „Po wyjściu shell: Zamknij okno”. We wszystkich innych przypadkach, gdy wpisuję "exit" lub "logout" w Terminalu, okno się zamyka, ale dla tego pliku ".command" (mogę dwukrotnie kliknąć plik skryptu powłoki i skrypt działa), zamiast tego zamykanie okna, natomiast kod w pliku mówi „exit”, co pokazuje na ekranie jest:

... 
$l done 
logout 

[Process completed] 

... a okno pozostaje otwarte. Czy ktoś wie, jak uruchomić skrypt powłoki, a następnie automatycznie zamyka okno Terminalu po zakończeniu?

Dzięki!

+0

Ktoś przynajmniej ma jakieś wskazówki, gdzie mogę to wyszukać? – LOlliffe

+0

to samo pytanie tutaj: http://stackoverflow.com/questions/8798641/close-terminal-window-z-within-shell-script-unix – ericsoco

Odpowiedz

23

byłem w końcu w stanie wyśledzić odpowiedź do tego. Podobnie jak w odpowiedzi Cobbala, wywołuje AppleScript, ale ponieważ jest to jedyne okno, które otworzyłem i chcę uruchomić mój skrypt jako szybką operację typu "otwórz i zamknij", to bardziej brutalne podejście działa doskonale dla mnie.

W „.command” scenariusza samego „... dodaj tę linię do skryptu na końcu”

osascript -e 'tell application "Terminal" to quit' & 
exit 

ŹRÓDŁO: http://forums.macosxhints.com/archive/index.php/t-2538.html

+0

Wygląda na to, że okno terminala monituje o potwierdzenie (ponieważ nie chcę, aby preferencje terminala były aktualizowane globalnie.) – Cahit

+4

Ale to zamknęłoby wszystkie okna terminala, nawet gdyby były otwarte do innych celów. – jayatubi

0

Jest to ustawienie w aplikacji Terminal. Niestety, dotyczy wszystkich okien terminalu, nie tylko tych uruchomionych za pośrednictwem pliku .command.

+0

W Preferencjach, mam to ustawione "Kiedy powłoka wychodzi: Zamknij okno" i "Pytaj przed zamknięciem: Nigdy", ale nadal zachowuje się w sposób opisany powyżej. Czy jest inne ustawienie, którego mi brakuje? Dzięki – LOlliffe

+0

@LOlliffe działa na mnie w ten sposób, upewnij się jednak, że zmieniasz ustawienia domyślnego motywu. – cobbal

0

można użyć trochę AppleScript hacking na to:

tell application "Terminal" 
    repeat with i from 1 to number of windows 
     if (number of (tabs of (item i of windows) whose tty is "/dev/ttys002")) is not 0 then 
      close item i of windows 
      exit repeat 
     end if 
    end repeat 
end tell 

zastępując /dev/ttys002 z tty

0

Używam następujące polecenia w moim skrypt

rzucić -n zacisk

oczywiście trzeba mieć terminal ustawiony, aby nigdy nie poprosi przed zamknięciem.

+0

OP opisuje skrypt powłoki, więc powinieneś określić swój skrypt AppleScript. –

18

To działało idealnie dla mnie .. to po prostu zamyka to okno wykonanie pozostawiając inne okna terminal otwarty

Wystarczy otworzyć terminal i przejdź do terminalowe> Preferencje> Ustawienia> Shell:> Po wyjściu powłoki: -> Zamknij jeśli powłoka opuściła czysto

Następnie po prostu dodaj wyjście; na końcu twojego pliku.

+0

Zaakceptowana odpowiedź polegała na zamknięciu procesu ('sourcetree w moim przypadku') uruchomionego przez skrypt. Ta odpowiedź właśnie zamknęła terminal tak, jak się spodziewałem. –

0

Krótki konieczności korzystania z rozwiązań AppleScript powyżej, jest to jedyne rozwiązanie skrypt, który pracował (exit nie), nawet jeśli nagle do mnie (testowane w OS X 10.9):

... 
echo "$l" done 
done 

killall Terminal 

Oczywiście zabije to wszystkie działające instancje terminalu, więc jeśli uruchomiłeś okno terminala przed uruchomieniem skryptu, zostanie ono również zakończone. Na szczęście ponowne uruchomienie terminala powoduje przejście do stanu "przywróconego", ale należy to uwzględnić tylko w przypadkach skrajnych, a nie jako czyste rozwiązanie.

4

użyć „terminal> Preferencje> Ustawienia> Shell:> Po wyjściu powłoki: -> Zamknij jeśli powłoka wyszedł czysty” wyżej wspomnianą opcją, ale umieścić

exit 0 

jako ostatniego wiersza polecenia plik. To zapewnia, że ​​skrypt naprawdę "wyjdzie czysto" - w przeciwnym razie, jeśli poprzednie polecenie nie zwróci sukcesu, to okno się nie zamknie.

Powiązane problemy