26

In my shell script, my last lines are:

...
echo "$l" done
done

exit

I have Terminal preference set to "When the shell exits: Close the window". In all other cases, when I type "exit" or "logout", in Terminal, the window closes, but for this ".command" file (I can double-click on my shell script file, and the script runs), instead of closing the window, while the file's code says "exit", what shows on the screen is:

...
$l done
logout

[Process completed]

...and the window remains open. Does anyone know how to get a shell script to run, and then just automatically quit the Terminal window on completion?

Thanks!

LOlliffe
  • 1,576
  • 5
  • 20
  • 41

7 Answers7

26

I was finally able to track down an answer to this. Similar to cobbal's answer, it invokes AppleScript, but since it's the only window that I'd have open, and I want to run my script as a quick open-and-close operation, this more brutish approach, works great for me.

Within the ".command" script itself, "...add this line to your script at the end"

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

SOURCE: http://forums.macosxhints.com/archive/index.php/t-2538.html

LOlliffe
  • 1,576
  • 5
  • 20
  • 41
  • Looks like the Terminal window prompts to confirm (since I don't want to have the Terminal preferences updated globally.) – Cahit Dec 06 '11 at 02:45
  • 8
    But this would close all the terminal windows even they were opened for other purposes. – jayatubi Aug 02 '16 at 09:12
21

This worked perfectly for me.. it just closes that execution window leaving other terminal windows open

Just open Terminal and go to Terminal > Preferences > Settings > Shell: > When the shell exits: -> Close if the shell exited cleanly

Then just add exit; at the end of your file.

Sagar Patil
  • 219
  • 2
  • 3
  • The accepted answer was closing the process (`sourcetree in my case`) started by the script. This answer just closed the terminal just as I expected. – coding_idiot Feb 22 '16 at 19:45
5

Use the 'Terminal > Preferences > Settings > Shell: > When the shell exits: -> Close if the shell exited cleanly' option mentioned above, but put

exit 0

as the last line of your command file. That ensures the script really does 'exit cleanly' - otherwise if the previous command doesn't return success then the window won't close.

pooroldpedro
  • 161
  • 1
  • 4
1

Short of having to use the AppleScript solutions above, this is the only shell script solution that worked (exit didn't), even if abruptly, for me (tested in OS X 10.9):

...
echo "$l" done
done

killall Terminal

Of course this will kill all running Terminal instances, so if you were working on a Terminal window before launching the script, it will be terminated as well. Luckily, relaunching Terminal gets you to a "Restored" state but, nevertheless, this must be considered only for edge cases and not as a clean solution.

0

I'm using the following command in my script

quit -n terminal

Of course you have to have the terminal set to never prompt before closing.

  • 1
    The OP mentions a shell script so you should specify your script is AppleScript. –  Mar 25 '15 at 02:11
0

There is a setting for this in the Terminal application. Unfortunately, it is relative to all Terminal windows, not only those launched via .command file.

mouviciel
  • 64,811
  • 11
  • 108
  • 139
  • In Preferences, I have it set "When the shell exits: Close the window" and "Prompt before closing: Never", but it still behaves in the way I outlines above. Is there another setting that I'm missing? Thanks – LOlliffe Apr 19 '10 at 19:29
  • @LOlliffe works for me that way, make sure you are changing settings for your default theme though. – cobbal Apr 19 '10 at 20:01
0

you could use some applescript hacking for this:

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 

replacing /dev/ttys002 with your tty

cobbal
  • 68,517
  • 19
  • 142
  • 155