2010-04-02 20 views
19

En mi script de shell, mis últimas líneas son:¿Cómo obtengo un archivo Mac ".command" para cerrar automáticamente después de ejecutar un script de shell?

... 
echo "$l" done 
done 

exit 

Tengo conjunto de preferencias Terminal para "Cuando las salidas de Shell: Cerrar la ventana". En todos los demás casos, cuando escribo "exit" o "logout", en Terminal, la ventana se cierra, pero para este archivo ".command" (puedo hacer doble clic en el archivo script de mi shell y ejecutar el script) de cierre de la ventana, mientras que el código del archivo dice "salida", lo que se muestra en la pantalla es:

... 
$l done 
logout 

[Process completed] 

... y la ventana permanece abierta. ¿Alguien sabe cómo ejecutar un script de shell y luego simplemente cierra automáticamente la ventana de Terminal al finalizar?

Gracias!

+0

¿Al menos alguien tiene alguna pista sobre dónde podría buscar esto? – LOlliffe

+0

misma pregunta aquí: http://stackoverflow.com/questions/8798641/close-terminal-window-from-within-shell-script-unix – ericsoco

Respuesta

23

que finalmente fue capaz de localizar a una respuesta a esto. Similar a la respuesta de cobbal, invoca AppleScript, pero como es la única ventana que tendría abierta, y quiero ejecutar mi script como una operación rápida de abrir y cerrar, este enfoque más brutal, funciona muy bien para mí.

Dentro de la secuencia de comandos ".command" sí "... añadir esta línea a su script al final"

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

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

+0

Parece que la ventana del terminal solicita confirmación (ya que no quiero que las preferencias de la Terminal se actualicen globalmente) – Cahit

+4

Pero esto cerraría todas las ventanas de la terminal, incluso si se abrieron para otros fines. – jayatubi

0

Hay una configuración para esto en la aplicación Terminal. Desafortunadamente, es relativo a todas las ventanas de la Terminal, no solo a las lanzadas a través del archivo .command.

+0

En Preferencias, lo tengo configurado "Cuando el shell sale: Cierra la ventana" y "Preguntar antes de cerrar: nunca", pero todavía se comporta de la manera que describo más arriba. ¿Hay alguna configuración que me falta? Gracias – LOlliffe

+0

@LOlliffe funciona para mí de esa manera, sin embargo, asegúrese de cambiar las configuraciones para su tema predeterminado. – cobbal

0

que podría tomar alguna applescript piratería para esto:

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 

reemplazando /dev/ttys002 con su TTY

0

estoy usando el siguiente comando en mi guión

dejar de fumar -n terminal de

Por supuesto, usted tiene que tener el terminal en Nunca indicación antes de cerrar.

+0

El OP menciona un script de shell, por lo que debe especificar que su script sea AppleScript. –

18

Esto funcionó perfectamente para mí .. sólo cierra esa ventana de ejecución dejando otras ventanas de terminal abierta

Sólo tiene que abrir la terminal y vaya a Terminal> Preferencias> Configuración> Shell:> Cuando se sale de la cáscara: -> Cerrar si el shell salió limpiamente

Luego simplemente agregue exit; al final de tu archivo.

+0

La respuesta aceptada fue cerrar el proceso ('sourcetree in my case') iniciado por el script. Esta respuesta acaba de cerrar la terminal tal como esperaba. –

0

corto de tener que utilizar las soluciones de AppleScript anteriormente, esta es la única solución script de shell que trabajó (exit no lo hizo), incluso si bruscamente, para mí (probado en OS X 10.9):

... 
echo "$l" done 
done 

killall Terminal 

Por supuesto, esto matará a todas las instancias de terminal en ejecución, por lo que si estaba trabajando en una ventana de Terminal antes de iniciar la secuencia de comandos, también terminará. Afortunadamente, la Terminal de relanzamiento lo lleva a un estado "Restaurado" pero, sin embargo, esto debe considerarse solo para casos límite y no como una solución limpia.

4

utilizar el 'Terminal> Preferencias> Configuración> Shell:> Cuando se sale de la cáscara: -> Cerrar si el shell salió limpiamente' opción mencionada anteriormente, pero poner

exit 0 

como la última línea de su comando archivo. Eso garantiza que el script realmente 'salga limpiamente'; de lo contrario, si el comando anterior no tiene éxito, la ventana no se cerrará.

Cuestiones relacionadas