OSX - Cómo cerrar automáticamente la ventana de Terminal después de ejecutar el comando "salir".

104

Cuando termine con Terminal, quiero salir. Ahora mismo, tengo tres opciones:

  1. Terminal de killall. Terminará el proceso, pero de forma bastante abrupta. No creo que esta sea la mejor idea.

  2. Llame a la salida. Cambié la configuración, así que salir cierra la Terminal. Sin embargo, la aplicación todavía aparece abierta en el Dock y no hace lo que quiero que haga.

  3. Haga clic derecho> Salir. Sin embargo, este no es un comando de Terminal para salir.

Entonces, ¿cuál es la forma en que debo salir y cerrar la Terminal? Escuché algo sobre osascript pero no estoy muy seguro. Quiero salir y cerrar, para que la Terminal ya no esté abierta, tanto como ventana como como proceso.

acero oscuro
fuente
Por ejemplo kill, el killallenvío predeterminado es SIGTERM, que se puede detectar. Algunos programas lo detectan, limpian después de sí mismos y salen con gracia. No tengo idea de si Terminal.appestá entre ellos. Sin embargo, sospecho que esto sería mejor en Ask Different o Super User en caso de apuro, ya que no parece tener ningún contenido de programación.
dmckee --- ex-moderador gatito
1
Creo que la pregunta estaría mejor redactada "¿Cómo salir de Terminal después de que sale el último shell?".
Chris Page

Respuestas:

194

en Terminal.app

Preferencias> Perfiles> (Seleccionar un perfil)> Shell.

en 'Cuando el shell sale' elegido 'Cerrar la ventana'

Duque
fuente
@PrabhuKonchada no sería demasiado terrible si quisieras usar ese espacio para alimentar la salida del usuario, pero de lo contrario, la respuesta de insanikov me habría ido muy bien
Frankenmint
Obvio y limpio, perfecto.
aydinugur
12
En las versiones más recientes de OS X, esta opción se puede encontrar en 'Preferencias> Perfiles> (Seleccionar un perfil)> Shell.
XtraSimplicity
Puede usar el enlace para obtener más información paso a paso cnet.com/news/terminal-tip-close-windows-after-clean-exit
Krishan Kumar Mourya
1
También puede seleccionar todos los perfiles y realizar el cambio en todos a la vez.
31

¿Qué tal el viejo Command-Q?

Holygeek
fuente
Quiere decir comando. P. ¿Es este un buen método? No me parece diferente a Killall.
darksteel
@darksteel: Command-Q es la forma correcta de cerrar una aplicación en Mac. Hacer un killall probablemente también esté bien, ya que se le dice a la aplicación que termine limpiamente.
tomlogic
2
Sí, quise escribir "Comando" pero salió como Ctrl. Yo diría que es un caso de PEBBAF (el problema existe entre el cerebro y las yemas de los dedos).
holygeek
kill / killall no es una buena forma de terminar una aplicación, generalmente. Eso podría descartar el estado no guardado o guardar el estado que no refleja correctamente cómo se vería la aplicación si la saliera. Mac OS X tiene una función de "Terminación repentina" donde los programas pueden indicar cuándo se encuentran en un estado en el que es seguro eliminarlos (con SIGKILL, de hecho), y si verificaste el estado de Terminal con Monitor de actividad para verificarlo. es seguro eliminarlo primero (muestre la columna "Terminación repentina" y busque "Sí"), luego puede hacerlo, pero no puede automatizar fácilmente ese flujo de trabajo.
Chris Page
Siempre podemos usar command-Q después de salir, que cierra todos los procesos y luego cierra la terminal.
Optimus Prime
29

En la aplicación Terminal, pestaña Preferencias >> Perfiles .

Seleccione la pestaña Shell a la derecha. ingrese la descripción de la imagen aquí

Puede elegir No preguntar nunca antes de cerrar para suprimir la advertencia.

Blaise
fuente
5
Lo logré con When shell exits:"cerrar la ventana"
Anup
1
Esta respuesta no funcionó para mí al elegir "Nunca". Sin embargo, el comentario de @ Anup sobre "Cerrar la ventana" me sirvió.
Ultimater
12

En realidad, debe establecer una configuración en su Terminal, cuando su Terminal esté arriba presione + y ,luego verá la siguiente pantalla:

ingrese la descripción de la imagen aquí

Luego presione la pestaña de shell y verá la siguiente pantalla:

ingrese la descripción de la imagen aquí

Ahora selecciona Close if the shell exited cleanlypara cuando se cierra la concha .

Por la configuración anterior, cada vez con el exitcomando, la Terminal se cerrará pero no se cerrará.

AmerllicA
fuente
10

Puede usar AppleScript a través del osascriptcomando:

osascript -e 'tell application "Terminal" to quit'
icktoofay
fuente
No había probado el comando osascript, pero tengo dos problemas con esto: 1. Es bastante largo para que un comando se cierre. ¿No debería ser más sencillo? Me gusta en Windows cómo la salida termina el símbolo del sistema. 2. Todavía me pide que salga de Terminal. Quiero que siga los movimientos. Apareció una ventana preguntando si realmente quería dejar de fumar.
darksteel
1
@darksteel: 1. Agregue un alias en su .bashrc(o equivalente si usa un shell diferente). Todavía estoy pensando en una respuesta a 2.
icktoofay
Estoy pensando que el comando Q funciona mejor. Pero tengo curiosidad por saber cómo configurar un alias correctamente. Hay algunos comandos como "ping google.com" que utilizo con la suficiente frecuencia como para preferir un alias.
darksteel
@darksteel: Esto es pensarlo demasiado, pero para evitar 2, puede iniciar un proceso demonizado que duerme alrededor de un segundo, y luego exitdespués de comenzar el proceso demonizado. Después de que el proceso demonizado haya esperado un segundo, podría llamar osascriptcomo se describe.
icktoofay
@darksteel: También puede desencadenar una pulsación de tecla a través de osascript: tell application "System Events" to keystroke "a" using command down. Sin embargo, esto probablemente también tenga el problema.
icktoofay
9

En una ventana de terminal, puede escribir:

kill -9 $(ps -p $PPID -o ppid=)

Esto matará el proceso de aplicación de Terminal, que es el padre del padre del proceso actual, como lo ve el comando kill.

Para cerrar una ventana de Terminal desde dentro de un script en ejecución, debe subir un nivel más en la jerarquía de procesos como este:

kill -9 $(ps -p $(ps -p $PPID -o ppid=) -o ppid=) 
GOTO 0
fuente
7
Para su información, esta solución también mata a otras ventanas de terminal.
tresf
Y no lo use a kill -9menos que sepa que otras señales no funcionarán.
tripleee
9

Que he estado usando ctrl + d. Lo lanza al destino donde inició el comando sqlite3 en primer lugar.

kalafun
fuente
5

osascript -e "tell application \"System Events\" to keystroke \"w\" using command down"

Esto simula una pulsación de tecla CMD+ w.

Si desea que Terminal se cierre por completo, puede usar: osascript -e "tell application \"System Events\" to keystroke \"q\" using command down"

Esto no da ningún error y hace que la Terminal se detenga limpiamente.

insanikov
fuente
4

También puede utilizar este complicado comando, que no activa una advertencia sobre la finalización de su propio proceso:
osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit

Este comando es bastante largo, por lo que podría definir un alias (como quit) en su perfil de bash:
alias quit='osascript -e "do shell script \"osascript -e \\\"tell application \\\\\\\"Terminal\\\\\\\" to quit\\\" &> /dev/null &\""; exit'

Esto le permitiría simplemente escribir quiten la terminal sin tener que jugar con ninguna otra configuración.

David P.
fuente
2

Use el osascriptcomando en su código como mencionó icktoofay:osascript -e 'tell application "Terminal" to quit'

Luego, abra las preferencias de Terminal, vaya a Configuración> Shell y configure "Preguntar antes de cerrar:" en "Nunca". La terminal ahora debería cerrarse por completo (no permanecer abierta en su dock) e ignorar el mensaje antes de salir. Si solo tiene una ventana de Terminal abierta y el osascriptcomando es su última línea de código, debe esperar a que termine el comando que ejecutó antes.

Esto no sería ideal si está ejecutando scripts en la misma ventana u otras ventanas en segundo plano (por ejemplo, puede ejecutar un comando en segundo plano y continuar usando la ventana actual para otros comandos si el primer comando va seguido de un ampersand ); ¡ten cuidado!

Si envuelve el osascriptcódigo en un archivo de script de shell, probablemente pueda llamarlo con cualquier nombre de archivo conciso que le dé --- siempre que esté en la ruta de búsqueda de Terminal (ejecute echo $PATHpara ver dónde Terminal busca scripts).

Juan
fuente
1

Crea una secuencia de comandos:

cat ~/exit.scpt

Me gusta esto:

  • Nota: Si solo hay una ventana, simplemente salga de la aplicación, de lo contrario simule command + wpara cerrar la pestaña)

tell application "Terminal" set WindowNum to get window count if WindowNum = 1 then quit else tell application "System Events" to keystroke "w" using command down end if end tell

Luego agregue un alias en su * shrc

como vi ~/.bashrco zshrc(¿algo más?)

agregarlo: alias exit="osascript ~/exit.scpt"

Y obtenga el ~ / .bashrc o vuelva a abrir su terminal.app

Pecado
fuente
0

He estado usando

salir -n terminal

al final de mis guiones. Debe tener el terminal configurado para que nunca pregunte en las preferencias

Entonces Terminal> Preferencias> Configuración> Shell Cuando el shell sale Cierre la ventana Preguntar antes de cerrar Nunca

Jon
fuente
0

Probé varias variaciones de las respuestas aquí. No importa lo que intente, siempre puedo encontrar un caso de uso en el que se le solicite al usuario que cierre la Terminal.

Dado que mi secuencia de comandos es simple ( drutil -drive 2 tray openpara abrir una unidad de DVD específica), el usuario no necesita ver la ventana de Terminal mientras se ejecuta la secuencia de comandos.

Mi solución fue convertir el script en una aplicación, que ejecuta el script sin mostrar una ventana de Terminal. El beneficio adicional es que cualquier ventana de terminal que ya esté abierta permanece abierta, y si no hay ninguna, Terminal no permanece residente después de que finaliza el script. No parece iniciar Terminal en absoluto para ejecutar el script bash.

Seguí estas instrucciones para convertir mi script en una aplicación: https://superuser.com/a/1354541/162011

James L.
fuente
-3

Si se trata de una Mac, escriba 'salir' y luego presione Intro.

Tremaine
fuente