¿Es posible abrir una nueva pestaña en el terminal de Mac OS X desde la línea de comando en una pestaña abierta actualmente?
Sé que el atajo de teclado para abrir una nueva pestaña en Terminal es "CMD + t" pero estoy buscando una solución basada en script ejecutada en la línea de comando.
echo hello
en esta nueva pestaña?-e 'tell application "Terminal" to do script "echo hello" in selected tab of the front window'
al final del comando osascript.open -a iTerm ~/Applications/
-e 'tell application "Terminal" to do script "cd /path/to/target/directory" in selected tab of the front window'
. Tenga en cuenta que si la ruta proviene de una variable, deberá usar una cadena entre comillas dobles en lugar de entre comillas simples y escapar de la cadena entre comillas internas, y probablemente la ruta en sí.Actualización : esta respuesta ganó popularidad según la función de shell publicada a continuación, que aún funciona a partir de OSX 10.10 (con la excepción de la
-g
opción).Sin embargo, ahora está disponible una versión de script más completa, más robusta y probada en el registro de npm como CLI
ttab
, que también es compatible con iTerm2 :Si tiene Node.js instalado, simplemente ejecute:
(dependiendo de cómo haya instalado Node.js, es posible que deba anteponer
sudo
).De lo contrario, siga estas instrucciones .
Una vez instalado, ejecute
ttab -h
para obtener información de uso concisa oman ttab
para ver el manual.Sobre la base de la respuesta aceptada, a continuación se muestra una función de conveniencia de bash para abrir una nueva pestaña en la ventana de Terminal actual y, opcionalmente, ejecutar un comando (como beneficio adicional, hay una función variante para crear una nueva ventana ).
Si se especifica un comando, su primer token se utilizará como título de la nueva pestaña.
Ejemplos de invocaciones:
AVISO : Cuando ejecuta
newtab
(onewwin
) desde un script, la carpeta de trabajo inicial del script será la carpeta de trabajo en la nueva pestaña / ventana, incluso si cambia la carpeta de trabajo dentro del script antes de invocarnewtab
/newwin
- passeval
con uncd
comando como solución alternativa (ver ejemplo arriba).Código fuente (péguelo en su perfil de bash, por ejemplo):
fuente
-g
(no activar Terminal al crear la nueva pestaña / ventana) y-G
(no activar Terminal y no cambiar la pestaña activa dentro de Terminal ) - útil, por ejemplo, al iniciar un servidor en segundo plano. Tenga en cuenta que al crear una nueva pestaña de esta manera, Terminal aún debe activarse brevemente antes de que se reactive la aplicación previamente activa.newtab
, desafortunadamente, NO funciona. La solución es pasar unaeval
declaración con uncd
comando anewtab
; por ejemplo:newtab eval "cd ~/Library/Application\ Support; ls"
. Entre comillas todo el comando pasadoeval
y use la barra invertida-escape adentro.function newtab
yfunction newwin
(sin embargo, SIN paréntesis), por lo que debería evitar la colisión con los alias al definir las funciones, pero tenga en cuenta que en la invocación, un alias del mismo nombre tiene prioridad (para omita el alias, ad-hoc, cite cualquier parte del nombre de la función, por ejemplo:)\newtab
.<name>() { ... }
sintaxis de la función POSIX está<name>
sujeta a la expansión de alias , lo que rompe la definición de la función (¡error de análisis!) Si<name>
se define un alias . No suele ser una preocupación, ya que en los scripts que se invocan normalmente, la expansión de alias está desactivada de forma predeterminada. Sin embargo, en scripts FUENTES de un shell INTERACTIVO, como en archivos de perfil / inicialización, la expansión de alias ESTÁ activada. Solución: use unafunction <name> { ... }
sintaxis que no sea POSIX para definir la función;<name>
entonces NO está sujeta a expansión de alias.if [ "${BASH_SOURCE}" == "${0}" ]
declaración con un caso para que se pueda llamar como un script (por ejemplonewtab.sh
,newwin.sh
): gist.github.com/westurner/01b6be85e5a51fda22a6Así es como bash_it lo hace :
Después de agregar esto a su .bash_profile, usaría el
tab
comando para abrir el directorio de trabajo actual en una nueva pestaña.Ver: https://github.com/revans/bash-it/blob/master/plugins/available/osx.plugin.bash#L3
fuente
Esto abre una nueva terminal y ejecuta el comando "echo hello" dentro de ella.
fuente
do script ""
con una cadena vacía para crear una nueva terminal sin emitir un comando.Si usa oh-my-zsh (que todo geek de moda debería usar), después de activar el complemento "osx"
.zshrc
, simplemente ingrese eltab
comando; se abrirá una nueva pestaña ycd
en el directorio en el que se encontraba.fuente
tab
no parece hacer nadaEl atajo de teclado
cmd-t
abre una nueva pestaña, por lo que puede pasar esta pulsación de tecla al comando OSA de la siguiente manera:osascript -e 'tell application "System Events"' -e 'keystroke "t" using command down' -e 'end tell'
fuente
Los agregué a mi .bash_profile para poder tener acceso a tabname y newtab
Entonces, cuando esté en una pestaña en particular, simplemente escriba
para organizar todas las pestañas abiertas que tienes. Es mucho mejor que obtener información en la pestaña y cambiarla allí.
fuente
Sé que esta es una publicación antigua, pero esto funcionó para mí:
Para ejecutar un comando como se solicita a continuación, se necesita algo de jiggery:
fuente
cuando está en una ventana de terminal, el comando + n => abre un nuevo terminal y el comando + t => abre una nueva pestaña en la ventana del terminal actual
fuente
Si está utilizando iTerm, este comando abrirá una nueva pestaña:
fuente
y puede pasar el directorio de destino como parámetro
fuente
¿Qué pasa con este fragmento simple, basado en un comando de script estándar (echo):
fuente
Con X instalado (por ejemplo, de homebrew o Quartz), un simple "xterm &" hace (casi) el truco, abre una nueva ventana de terminal (aunque no una pestaña).
fuente