Así que parece que er tratando de establecer un indicador que cambia de estado cada vez que el Servicio se ejecuta, y no hay más que una manera de lograr esto.
En este ejemplo, he creado un Automator Servicio denominado Servicio de Prueba, con la configuración que se muestra en la imagen de abajo, y se añadió Ejecutar el Shell Script de acción, ya que esto es todo lo que usted necesita para realizar la tarea ya que se utiliza un do shell script
AppleScript comando de todos modos para hacer el trabajo.
Como está codificado, cada vez que el Servicio se ejecuta de que dice lo de la bandera , 0 o 1, y establece a la opuesta. A usted le de curso quitar el say...
comandos de sustitución de ellos con el código que queremos ejecutar en función de la configuración de la bandera.
#!/bin/bash
file="$HOME/Library/Services/Test Service.workflow"
flag="$(xattr -l "$file" | awk '/com.TestService.flag/{print $2}')"
if [[ $flag -eq 0 ]]; then
# Do something...
say "flag is currently set to 0, setting flag to 1"
# Set flag to 1.
xattr -w com.TestService.flag 1 "$file"
else
# Do something else...
say "flag is currently set to 1, setting flag to 0"
# Set flag to 0.
xattr -w com.TestService.flag 0 "$file"
fi
Este utiliza xattr
para establecer un atributo extendido en el Automator del Servicio .workflow
archivo y es esto lo que se lee cada vez y cambia cada vez que el Servicio se ejecuta y esta es la bandera para determinar qué rama de la if
instrucción se ejecuta en la secuencia de comandos.
Puede establecer manualmente el com.TestService.flag
uso de xattr
en la Terminal antes de ejecutar el guardado de Automator del Servicio a fin de tener el atributo extendido aplicado a es .workflow
archivo o si usted acaba de ejecutar la guarda de Automator del Servicio la primera vez que se fijará 1
como se lee el vacío flag
variable la primera vez como un ser igual a 0
.
La siguiente salida de la Terminal muestra los atributos extendidos de la Automator del Servicio .workflow
archivo cuando fue salvo, sólo tenía la com.apple.FinderInfo
de atributo y, a continuación, el Servicio se ejecute un par de veces para mostrar que el com.TestService.flag
atributo fue establecer y cambiar cada vez que el Servicio se ejecute. (Yo manualmente corrió la xattr
de comandos antes y después en-entre cada vez que me encontré con el Servicio de tener esta salida para mostrar.)
$ xattr -l "$HOME/Library/Services/Test Service.workflow"
com.apple.FinderInfo:
00000000 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020
$ xattr -l "$HOME/Library/Services/Test Service.workflow"
com.apple.FinderInfo:
00000000 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020
com.TestService.flag: 1
$ xattr -l "$HOME/Library/Services/Test Service.workflow"
com.apple.FinderInfo:
00000000 00 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020
com.TestService.flag: 0
$
Obviamente, usted puede cambiar el nombre de la bandera de com.TestService.flag
a lo que quieras sin embargo recuerda que el cambio en la secuencia de comandos en los tres lugares, en el awk
comando y en cada xattr
comando en cada rama de la if
declaración. También cambiar el nombre de la file
variable según sea apropiado para el real nombre de su Automator Servicio .workflow
archivo.