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.