How do I get a Mac “.command” file to automatically quit after running a shell script?

前端 未结 7 2182
隐瞒了意图╮
隐瞒了意图╮ 2021-02-06 23:47

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 wind

相关标签:
7条回答
  • 2021-02-07 00:12

    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.

    0 讨论(0)
  • 2021-02-07 00:17

    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

    0 讨论(0)
  • 2021-02-07 00:21

    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.

    0 讨论(0)
  • 2021-02-07 00:28

    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

    0 讨论(0)
  • 2021-02-07 00:34

    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.

    0 讨论(0)
  • 2021-02-07 00:34

    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 讨论(0)
提交回复
热议问题