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

Maxim Yefremov
fuente

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"
Lri
fuente
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'
dan zen
fuente
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.

krainboltgreene
fuente
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

Marc Barbeau
fuente
¿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