Quindi sembra che tu stia cercando di impostare un flag che si attiva ogni volta che viene eseguito Service e c'è più di un modo per farlo.
In questo esempio, ho creato un Automator servizio denominato Test Service , con le impostazioni mostrate nel immagine qui sotto, e ha aggiunto un Esegui script di shell azione , poiché è tutto ciò di cui hai bisogno per eseguire l'attività dal momento che stavi utilizzando un do shell script
AppleScript comando comunque per fare lavoro .
Comeattualmentecodificato,ognivoltacheilServiziovieneeseguitodicecheilflagèimpostatosu,0o1,eloimpostaalcontrario.Ovviamenterimuoveraiicomandisay...
sostituendoliconilcodicechevuoieseguireinbaseall'impostazionedelflag.
#!/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
Questo usa xattr
per impostare un attributo esteso sul Automator Servizio .workflow
file e è questo che viene letto ogni volta e modificato ogni volta che viene eseguito Servizio e questo è il flag per determinare quale ramo di if
istruzione viene eseguita nello script .
Puoi impostare manualmente com.TestService.flag
utilizzando xattr
in Terminale prima di eseguire il servizio salvato Automator in modo che l'attributo esteso applicato sia .workflow
file o se si esegue solo salvato Automator Servizio la prima volta è impostato su 1
mentre legge la% flag
variabile la prima volta come uguale a 0
.
Il seguente output del Terminale mostra gli attributi estesi del Automator's Servizio .workflow
file quando è stato salvato per la prima volta, aveva appena impostato com.apple.FinderInfo
attributo , quindi il servizio è stato eseguito un paio di volte per mostrare che l'attributo com.TestService.flag
è stato impostato e modificato ogni volta che è stato eseguito Servizio . (Ho eseguito manualmente il xattr
comando prima e poi ogni volta che ho eseguito il Servizio per mostrare questo output .)
$ 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
$
Ovviamente puoi cambiare il nome del flag da com.TestService.flag
a qualunque cosa desideri, ma ricorda di cambiarlo nello script in tutti e tre i luoghi, in il awk
comando e in ogni xattr
comando in ogni ramo della dichiarazione if
. Modifica anche il nome della file
variabile come appropriato per il nome effettivo del tuo Automator servizio .workflow
file .