¿Cómo escribo un script que abre una ventana de iTerm2 y ejecuta un comando?

Que estoy haciendo

Estoy usando iTerm2 Build 3.0.15 y escribiendo un script que abre una nueva ventana e imprime "hola mundo" en la pantalla. La verdad es que me interesa que sea para ejecutar cualquier comando pero utilizando echo "hello world"como punto de partida.

lo que he probado

Leí la documentación de iTerm2 para secuencias de comandos. Quería aprender más, así que arrastré el iTerm2ícono sobre el Script Editorícono para ver el diccionario disponible para mí y encontré el siguiente comando:

ingrese la descripción de la imagen aquí

Al leer el diccionario y la documentación, escribí el siguiente script:

tell application "iTerm"
  create window with default profile command "echo hello world"
end tell

Cuando ejecuté mi script desde la terminal, se abrió una nueva ventana y "hola mundo" estaba en la pantalla; sin embargo, obtuve el siguiente error de tubería rota:ingrese la descripción de la imagen aquí

Cuando selecciono Okla ventana cerrada y me quedo con el siguiente mensaje:

$ osascript iterm.applescript
window id 6415

Las preguntas

  • ¿Qué significan estos errores de identificación de ventana y tubería rota 6415?
  • ¿Cómo escribo un script que abre una ventana de iTerm2 y ejecuta un comando?
retrasar 1 escribir texto "claro" es bueno si quieres un comienzo limpio

Respuestas (3)

Prueba esto:

tell application "iTerm2"
    set newWindow to (create window with default profile)
    tell current session of newWindow
        write text "echo it works!"
    end tell
end tell

El write comando , cuando no se usa without newline, ejecuta el write text comando debido a la nueva línea agregada por defecto después del "texto para enviar". Por lo tanto, la ventana permanece abierta después de que se completa el comando , lista para uso adicional.


Del diccionario iTerm AppleScript:

escribir v : Enviar texto como si estuviera escrito.

      especificador de escritura : la sesión para enviar a
            [ contenido del archivo archivo] : nombre de archivo para enviar el contenido de
            [ texto texto]: texto para enviar
            [ nueva línea booleana]: si se debe agregar una nueva línea al final del texto (predeterminado: sí)

Esto solía funcionar cuando se ejecutaba con osascript -e, pero recientemente comenzó a darme un error -2741: error de sintaxis, "," esperado, pero se encontró el nombre de clase. (Mensaje de error traducido del alemán, la redacción en inglés puede ser ligeramente diferente).

Reemplazar command "echo hello world"con

command "bash -c \"echo hello world && read\""

El uso de readhace que bash espere a que el usuario finalice la línea (es decir, presionando Intro) antes de salir. Presionar Intro dentro de los 3 segundos aún generará la advertencia, ya que esta es una característica de iTerm que puede deshabilitar marcando la casilla en la alerta y controlarla con mayor precisión en Preferencias → Avanzado → Advertir sobre sesiones de corta duración.

@usuario Claro, editado
¿Es posible no tener el terminal cerca? El objetivo es poder decir "Abrir iTerm, ejecutar este comando y no salir"
on alfred_script(q)
    tell application "iTerm2"
        set newWindow to (create window with default profile)
        tell current session of newWindow
            write text q
        end tell
    end tell
end alfred_script
Estamos buscando respuestas que sean más que un simple fragmento de código. ¿Qué hace este guión, cómo se puede usar, en qué se diferencia del de aspecto similar en una de las otras respuestas y quién es Alfred? Edite su respuesta para agregar detalles.