abra una nueva pestaña en iTerm y ejecute el comando allí


17

He encontrado la manera de abrir una nueva pestaña en iTerm:

newtabi()
{
    osascript -e 'tell application "iTerm" to activate' -e 'tell application "System Events" to tell process "iTerm" to keystroke "t" using command down'
}

Y quiero ejecutar algunos comandos en una nueva pestaña. Que sea simple comando pwd. ¿Cómo hacerlo?

Si corro ...

newtabi && pwd

La nueva pestaña se abre como se esperaba, pero el pwdcomando no se ejecuta en la nueva pestaña sino en la antigua, donde escribínewtabi && pwd

Yo uso zsh. Mi os esOS X 10.8.5

Respuestas:


16

Uso tell session -1 of current terminal to write text "pwd":

activate application "iTerm"
tell application "System Events" to keystroke "t" using command down
tell application "iTerm" to tell session -1 of current terminal to write text "pwd"

1
si se abre más de uno iTerms, abre una nueva pestaña en la iTerminstancia correcta , pero escribe pwden la última pestaña de la primera instancia de iTerm
Maxim Yefremov

2
@efr Tienes razón. Edité la respuesta para cambiar terminal 1a current terminal. Ahora debería ejecutar el comando en la ventana actual en lugar de la ventana que se abrió primero.
Lri

2
Esto no funcionó en mac 10.11.6 con iTerm2. En el editor de script, se resalta "Fin de línea inesperado pero identificador encontrado" y "terminal"
Mike Blandford,

1
Esto ya no funciona en macOS 10.14:execution error: System Events got an error: osascript is not allowed to send keystrokes. (1002)
KernelSanders

12
osascript \
-e 'tell application "iTerm" to activate' \
-e 'tell application "System Events" to tell process "iTerm" to keystroke "t" using command down' \
-e 'tell application "System Events" to tell process "iTerm" to keystroke "ls"' \
-e 'tell application "System Events" to tell process "iTerm" to key code 52'

Me estoy poniendo 148:156: syntax error: Expected end of line but found identifier. (-2741)en esto.
temporary_user_name

4

A partir de al menos macos Mojave, iTerm 3.2.8, si ejecuta:

$ open -a iTerm .

Lo agregará como una pestaña a la ventana actual.


1

No pude obtener la respuesta aceptada para trabajar. También quería pasar múltiples comandos. Esto es lo que se me ocurrió.

newtabi(){  
  osascript \
    -e 'tell application "iTerm2" to tell current window to set newWindow to (create tab with default profile)'\
    -e "tell application \"iTerm2\" to tell current session of newWindow to write text \"${@}\""
}

Ejemplo de uso

newtabi pwd
newtabi 'cd ~/ && pwd'
newtabi 'echo \"Hello New Tab\"'

Para acciones más complejas, recomendaría dividir los comandos.

code_folder="/path/to/code"

alias project="cd ${code_folder}/my-project/foo && yarn run start"

Luego, newtabi project


¿Puede decirme cómo puedo pasar mi actual pwdpara hacer que el comando se vea como: 'newtabi' $ PWD / foo && yarn run start '?
Raj

1
@Raj, buena pregunta. Yo personalmente divido los comandos en alias y / o funciones más consumibles. Agregué otro ejemplo. ¡Espero eso ayude!
Marc Barbeau

Muchas gracias, @Marc!
Raj
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.