Archivo de la etiqueta: comandos

Ejecutar comandos de terminal desde AppleScript con permisos de administrador

En artículos anteriores hemos visto cómo ejecutar comandos del terminal desde un script de AppleScript gracias al comando do shell script. Pero puede que necesitemos ejecutar un comando de terminal con permisos de administrador.

Desde AppleScript podemos usar el comando do shell script indicando que se requiere la contrase&ntidle;a de administrador para ejecutar el programa. Esto lo podemos hacer incluyendo en la llamada do shell script los atributos with administrator privileges para indicar que el comando a ejecutar requiere la contraseña de administrador.

Su sintaxis es la siguiente:


do shell script "sudo comando a ejecutar" with administrator privileges

Hacer el mantenimiento de nuestro Mac gracias a AppleScript

Como ejemplo para este artículo vamos a crear un simple script que ejecute los scripts de mantenimiento diario, semanal y mensual para nuestro Mac.

El comando de terminal a ejecutar es:


periodic daily weekly monthly

Este comando se debe ejecutar con permisos de administrador por lo que es un candidato idóneo para nuestro ejemplo.

Nuestro script quedaría así:


on run
try
do shell script "sudo periodic daily weekly monthly" with administrator privileges
do shell script "afplay /System/Library/Sounds/Glass.aiff"
display alert "Proceso de mantenimiento realizado."
on error
do shell script "afplay /System/Library/Sounds/Basso.aiff"
display alert "Error al intentar inicializar el mantenimiento de este Mac."
end try
end run

Abrir y comprobar si una aplicación está abierta en MacOS con AppleScript

Con AppleScript podemos enviar y manipular aplicaciones para conseguir realizar tareas pero para que estas aplicaciones puedan realizar dichas tareas deben estar abiertas. Por esta razón, en muchas ocasiones, debemos asegurarnos dentro del código de nuestro script si la aplicación está abierta y de no ser así abrirla para poder operar con ella.

Preguntando si la aplicación está en ejecución

Ya vimos en el artículo estructuras condicionales en AppleScript cómo crear una estructura condicional para hacer preguntas con nuestro script.

Con una sentencia if then podemos preguntar a una aplicación si está activa o no. Por ejemplo, el siguiente código pregunta si la aplicación Mensajes est´ activa:


if application "Messages" is running then
-- código a ejecutar cuando mensajes está abierto
end if

También podemos consultar si la aplicación no está disponible:


if application "Messages" is not running then
-- código a ejecutar cuando la aplicación no está disponible
end if

Abriendo la aplicación

En AppleScript con el comando tell podemos enviar diversos comandos a las aplicaciones. Uno de estos comandos es ordenarle que se abra. Por ejemplo, abramos la aplicación mensajes:


tell application "Messages" to activate

Con tell también podemos crear bloques de código para enviar una serie de comandos a una aplicación. Su sintáxis es la siguiente:


tell application "Nombre de aplicación
-- Código a ejecutar con la aplicación
end tell

En muchas ocasiones es recomendable incluir pausas (comando delay) entre una operación y otra que enviemos a una aplicación para darle tiempo a la aplicación a procesar el comando y obtener un resultado.

Cerrando la aplicación

También podemos ordenar a una aplicación que se cierre. El comando en lugar de activate es quit. El código es el siguiente:


tell application "Messages" to quit

Ejemplo completo

En un script real que quisiera utilizar la aplicación mensajes para algo la estructura del código debería seguir la siguiente lógica:

  • Si la aplicación no está activa
  • Entonces abre la aplicación
  • Opera con la aplicación mensajes con la tranquilidad de que se sabe que recibirá nuestros comandos porque sabemos que está abierta

Nuestro script final quedaría de la siguiente forma:


if application "Messages" is not running then
tell application "Messages" to activate
end if

Esta práctica de seguridad es muy recomendable para asegurarnos de que nuestros scripts funcionan siempre como se espera.