Parece que estás intentando establecer una bandera que alterna cada vez que se ejecuta el Servicio , y hay más de una forma de lograrlo.
En este ejemplo, creé un Automator Servicio denominado Test Service , con la configuración que se muestra en la imagen a continuación, y se agregó una acción Ejecutar el script de shell , ya que esto es todo lo que necesita para realizar la tarea ya que estaba usando un do shell script
AppleScript command de todos modos para hacer el trabajo .
Comoestácodificadoactualmente,cadavezqueseejecutaelServiciodicequelabanderaseestableceen0o1,ylaestableceenelopuesto.Porsupuesto,eliminaríaloscomandossay...
reemplazándolosconelcódigoquedeseaejecutarsegúnlaconfiguracióndelabandera.
#!/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
Esto usa xattr
para establecer un atributo extendido en el Automator's Service .workflow
file y esto es lo que se lee cada vez y se cambia cada vez que se ejecuta el Servicio y esta es la bandera para determinar qué rama de if
sentencia se ejecuta en el script .
Puede configurar manualmente el com.TestService.flag
usando xattr
en Terminal antes de ejecutar el guardado Automator's Servicio para que se aplique el atributo extendido a .workflow
file o si simplemente ejecuta el guardado Automator Service es la primera vez que lo configurará como 1
, ya que lee flag
variable por primera vez como si fuera igual a 0
.
La siguiente salida de Terminal muestra los atributos extendidos del Automator's Servicio .workflow
archivo cuando se guardó por primera vez, solo tenía el com.apple.FinderInfo
atributo establecido, y luego el Servicio se ejecutó un par veces para mostrar que el atributo com.TestService.flag
se configuró y cambió cada vez que se ejecutó el Servicio . (Ejecuté manualmente el comando xattr
antes y luego entre cada vez que ejecuté el Servicio para mostrar este resultado .
$ 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, puedes cambiar el nombre de la bandera de com.TestService.flag
a lo que quieras, pero recuerda cambiarlo en el script en los tres lugares, en el comando awk
y en cada comando xattr
en cada rama de la declaración if
. También cambie el nombre de la variable file
según corresponda para el nombre real de su Automator Servicio .workflow
archivo .