0 votos

¿Cómo puedo salir de varias versiones de Firefox con Apple script?

Tengo dos versiones de firefox. Una tiene el nombre de aplicación "Firefox" y la otra se llama "Firefox 2".

Me gustaría decirle a AppleScript que cierre ambas instancias de Firefox. Este es mi código

tell application "Firefox" to quit
tell application "Firefox 2" to quit

Es raro porque puedo escribir esto en el Editor script, pero cuando pulso guardar siempre se convierte en esto.

tell application "Firefox" to quit
tell application "Firefox" to quit

enter image description here

He ejecutado este código y pongo el resultado a continuación.

tell application "System Events"
    set theVisibleApps to (name of application processes where visible is true)
end tell

{"Finder", "Terminal", "Script Editor", "firefox", "firefox"}

Y aquí está el código de error: error "Firefox obtuvo un error: La conexión no es válida". número -609

¿Cómo me aseguro de que ambos se cierren?

1voto

Ted Wrigley Puntos 101

Supongo que has hecho una copia física en el disco de Firefox.app y la has renombrado en el Finder como "Firefox 2.app". ¿Es eso correcto? Si es así, eso te va a causar dolores de cabeza. El nombre visible en el Finder no es realmente utilizado por el sistema. El sistema utiliza el nombre de la aplicación identificador de paquete - En el caso de Firefox, creo que es algo así como 'org.mozilla.firefox', que se encuentra en el archivo info.plist dentro del paquete de aplicaciones, y extrae los nombres de pantalla y demás de ese plist también. En cambio, en Unix se suele utilizar el nombre del ejecutable, que se encuentra en la carpeta MacOS dentro del paquete de aplicaciones. Como tu copia física tendrá el mismo ID de paquete que el original, el sistema se confundirá si intentas distinguir entre las aplicaciones de esa manera.

La forma normal de ejecutar dos instancias de una aplicación es utilizar el método unix open con el comando -n opción, por ejemplo, uno de estos:

open -n '/Applications/FireFox.app/Contents/MacOS/firefox'

open -n -g org.mozilla.firefox

Cada instancia abierta tendrá el mismo nombre y el mismo identificador de paquete, pero tendrán diferentes identificadores de proceso (pid), y puedes distinguirlos usando estos. Hay varias formas de hacerlo, dependiendo de cómo hayas configurado las cosas, pero para un hack rápido en AppleScript puedes usar algo como:

tell application "System Events"
    set unixIDs to unix id of (every process whose name is "Firefox")
end tell

Cualquiera que sea el ID de unix más bajo debería ser generalmente la instancia que se lanzó primero.

0voto

user3439894 Puntos 5883

Para mantener Script Editor de cambiar "Firefox 2" a "Firefox" el verdadero problema que tienes, lo siguiente ejemplo AppleScript código resolverá su problema y permitir una salida elegante de ambas ocurrencias de Firefox :

set fx1 to "Firefox"
set fx2 to "Firefox 2"

tell application fx1 to quit
delay 2
tell application fx2 to quit

En la captura de pantalla de abajo se puede ver en el Respuestas panel que cada ocurrencia de Firefox devuelto error number 0 , que es una salida airosa ¡! Cualquier número de error entonces 0 significa que algo salió mal.

Script Editor window


Nota: El <em>ejemplo </em><strong>AppleScript </strong><em>código </em>es sólo eso y no contiene ningún <em>tratamiento de errores </em>según corresponda. 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 de la <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.

-2voto

john Puntos 11

Si haces un 'ps' desde la línea de comandos obtendrás el PID de cada versión de Firefox. Entonces puedes matar un proceso escribiendo kill -9 PID. Debe haber una manera de buscar el PID de cada proceso y luego matar a cada uno. Tal vez usar awk que sé poco acerca de.

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