2 votos

¿Cómo puedo obtener mediante programación el texto de retroceso de la terminal?

Me encontré con este comentario que afirmaba que es posible acceder al texto en el scrollback de MacOS Terminal:

Encontrar texto en scrollback es una debilidad de la mayoría de los emuladores de terminal; los únicos que conozco que lo proporcionan son OS X Terminal y Terminator .

He buscado un poco, pero no he tenido suerte en encontrar nada en internet que diga cómo se puede hacer esto.

La razón por la que pregunto es que estoy buscando posibles soluciones para esta pregunta de Stack Overflow y estoy investigando si hay una forma de obtener el texto del último comando ejecutado en el Terminal de MacOS.

Para este caso de uso específico, espero encontrar la(s) línea(s) que coincida(n) con un patrón particular, para poder extraer el texto que coincida y pasarlo al open comando.

There were failing tests. See the report at: file:///path/to/parent-project/child-project-1/build/reports/tests/test/index.html

open file:///path/to/parent-project/child-project-1/build/reports/tests/test/index.html

En resumen, ¿cómo puedo obtener el texto del Terminal scrollback? Puntos de bonificación si se limita a sólo el ouptut del último comando, pero puedo hacer una solución viable a mi problema si puedo obtener el texto completo de la Terminal scrollback.

2voto

user3439894 Puntos 5883

Suponiendo que sólo haya una instancia del file:///.../index.html URL en el contenido de todo el búfer de desplazamiento de la pestaña, entonces ejemplo AppleScript código puede hacerlo:

tell application "Terminal" to ¬
    set tabHistory to ¬
        history of tab of ¬
        front window as text

set fileURL to ¬
    do shell script ¬
        "grep -o 'file:///.*\\.html' <<< " & ¬
        tabHistory's quoted form & "; exit 0"

if fileURL is not "" then ¬
    do shell script ¬
        "open " & fileURL's quoted form

Notas:

El ejemplo AppleScript código arriba actúa sobre la pestaña seleccionada del frente ventana en Terminal .

Si hay un file:///.../index.html URL en el contenido de todo el búfer de desplazamiento será abierto por el open comando .

Si hay más de una instancia del file:///.../index.html URL en el contenido de todo el búfer de desplazamiento de la pestaña, luego haga el siguiente cambio en el ejemplo AppleScript código para abrir la última instancia del file:///.../index.html URL :

Cambiar :

set fileURL to ¬
    do shell script ¬
        "grep -o 'file:///.*\\.html' <<< " & ¬
        tabHistory's quoted form & "; exit 0"

A :

set fileURL to ¬
    last paragraph of ¬
    (do shell script ¬
        "grep -o 'file:///.*\\.html' <<< " & ¬
        tabHistory's quoted form & "; exit 0")

Si desea utilizar Safari para abrir el URL y tenerlo al frente, entonces:

Cambios:

if fileURL is not "" then ¬
    do shell script ¬
        "open " & fileURL's quoted form

Para:

if fileURL is not "" then ¬
    tell application "Safari"
        make new document with properties {URL:fileURL}
        activate
    end tell

El ejemplo AppleScript código puede guardarse como shell script con un #!/usr/bin/osascript shebang , hecho ejecutable y correr de Terminal .


Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y sin ningún tipo de inclusión <em>tratamiento de errores </em>no contiene ningún otro <em>tratamiento de errores </em>según convenga. Corresponde al usuario añadir cualquier <em>tratamiento de errores </em>como sea apropiado, necesario o deseado. Eche un vistazo a la <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129232" rel="nofollow noreferrer"><strong>pruebe con </strong></a><em>declaración </em>y <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_control_statements.html#//apple_ref/doc/uid/TP40000983-CH6g-129657" rel="nofollow noreferrer"><strong>error </strong></a><em>declaración </em>en el <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html" rel="nofollow noreferrer"><strong>Guía del lenguaje AppleScript </strong></a>. Véase también, <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_error_xmpls.html#//apple_ref/doc/uid/TP40000983-CH221-SW1" rel="nofollow noreferrer"><strong>Trabajar con errores </strong></a>. Además, el uso del <a href="https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW10" rel="nofollow noreferrer"><strong>retraso </strong></a><em>comando </em>puede ser necesario entre eventos cuando sea apropiado, por ejemplo <code>delay 0.5</code> con el <em>valor </em>de la <em>retraso </em>ajustado apropiadamente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X