Come fare in modo che un file AppleScript esistente funzioni come servizio?


11

Ho creato un AppleScript, l'ho salvato come file in una cartella specifica sul mio disco rigido. Ora voglio assegnare un collegamento ad esso e sembra che debba fare un servizio tramite Automator, ma Run AppleScriptmi chiede di inserire il codice, mentre voglio eseguire il file .scpt già esistente. Come farlo?

Risposte:


9

Sì, Automator è l'opzione migliore qui. Per creare il servizio attenersi alla seguente procedura:

  1. Apri Automator e seleziona Servizio:

    inserisci qui la descrizione dell'immagine

  2. Cerca 'applescript' e trascina l'azione nel riquadro a destra:

    inserisci qui la descrizione dell'immagine

  3. Passare Service receives selected texta in Service receives no inputmodo che appaia sempre nel menu Servizi:

    inserisci qui la descrizione dell'immagine

  4. Sostituisci (* Your script goes here *)con:

    do shell script "/usr/bin/osascript /path/to/your/script.scpt"

    se si desidera eseguire il .scptfile esistente . Si noti che osascript non può gestire l'interazione dell'utente come la visualizzazione di una finestra di dialogo:

    inserisci qui la descrizione dell'immagine

    Per superare questa limitazione, utilizzare questa soluzione alternativa o semplicemente sostituirla (* Your script goes here *)con il contenuto dello script.

  5. Salvarlo:

    inserisci qui la descrizione dell'immagine

  6. Se lo desideri, puoi assegnare un collegamento al tuo nuovo servizio. Seleziona Servizi> Preferenze servizi nel Finder (o qualsiasi applicazione aperta):

    inserisci qui la descrizione dell'immagine

  7. Assegna uno shorcut non così comune:

    inserisci qui la descrizione dell'immagine

  8. Ora il tuo servizio è accessibile da qualsiasi applicazione tramite il collegamento che hai assegnato nel passaggio precedente:

    inserisci qui la descrizione dell'immagine

Se vuoi sbarazzarti del servizio aperto ~/Library/Services, elimina il servizio e svuota il cestino:

inserisci qui la descrizione dell'immagine


Ho detto che voglio eseguire il file di script esistente, non scriverlo di nuovo in Automator.
Nakilon,

Ho pensato che copia / incolla sarebbe andato bene, ma sì, hai ragione, è indicato chiaramente nella tua domanda. Utilizzare osascript, come spiegato in altre risposte.
Jaume,

@Nakilon Ho aggiunto come utilizzare osascriptAutomator per eseguire il .scptfile, una limitazione e due soluzioni alternative.
Jaume,

L'ho appena fatto. Ha funzionato; ma ora sono necessari dai 4 ai 5 secondi per avviare lo script. (Quando il codice è stato salvato direttamente nel flusso di lavoro, è stato avviato quasi immediatamente.) Qualche idea su cosa lo causi o su come renderlo più veloce?
Zack,

1
@Zack Grazie, non so perché siano osascriptnecessari altri 4 secondi per eseguire il tuo script, ma Automator non è la causa del ritardo, che era la mia preoccupazione. Potresti voler eseguire il debug osascript, vedi opensourcehacker.com/2011/12/02/… e stackoverflow.com/questions/31045575/…
jaume

4

Nello script, aggiungi un on runargomento:

on run
    -- do whatever the script does
end run

Quindi è possibile utilizzare l'azione "Esegui script shell" di Automator, con il osascriptcomando:

osascript /path/to/script.scpt

osascriptè un comando che esegue AppleScript nella shell. Sono necessarie le linee nello script per consentire l'esecuzione dello script all'esterno dell'editor AppleScript.


1
Non è necessario includere un gestore di esecuzione esplicito. Tutti gli script hanno un gestore di esecuzione implicito. Il motivo per cui l'azione AppleScript di Automator Run include un gestore di esecuzione esplicito potrebbe essere dovuto al fatto che Automator utilizza il on run {input, arguments}modulo speciale , ma anche in Automator puoi semplicemente rimuovere il gestore di esecuzione.
Lri,

1
@ ͏͏͏ Mi chiedo se questo ping ti arriva. Complimenti per la selezione del nome della creatività.
bmike

3

Forse vorresti dare un'occhiata a questo servizio , che ti permette di "creare servizi Mac OS X da qualsiasi script".


1
Puoi fornire una risposta qui piuttosto che un semplice link
user151019

2

Non consiglierei di creare servizi di Automator per assegnare scorciatoie agli script. C'è un bug in 10.7 e 10.8 in cui le scorciatoie da tastiera per i servizi di Automator non funzionano sempre fino a quando non si passa sopra il menu dei servizi dalla barra dei menu. C'è anche un ritardo relativamente lungo (forse da 0,1 a 1 s) prima dell'esecuzione dei servizi.

Vedi questa risposta per altri modi per assegnare le scorciatoie da tastiera agli script. Uso FastScripts e Alfred da solo.


Non ho mai provato questo bisogno di librarmi? hai maggiori dettagli di cosa stai parlando
markhunte,

1
Non sono sicuro che influisca su tutte le installazioni di OS X o su tutti i servizi, ma mi sono imbattuto più volte in installazioni diverse, e è stato menzionato da altre persone qui e in Super User. A volte le scorciatoie da tastiera per tutti i servizi di Automator smettono di funzionare (o non succede nulla se li premi), ma riprendono a funzionare se passi il mouse sopra il menu dei servizi dalla barra dei menu o se, ad esempio, selezioni un servizio con il mouse.
Lri,

2

È possibile eseguire lo script esistente con un semplice servizio di automazione come questo. E assegnare la scorciatoia all'interno delle scorciatoie da tastiera normalmente. Ricorda solo che alcune applicazioni potrebbero dover essere riavviate prima che prendano le scorciatoie.

esempio.

script SayHello:

say "hello"

Servizio di automazione: inserisci qui la descrizione dell'immagine

Che in questo esempio utilizza:

  • Nessun input
  • Qualsiasi applicazione

L'azione è uno script Run Shell Il codice utilizza solo il comando unix osascript e il percorso del file. L'input del passaggio può essere su stdn o su argomento

Non è necessario fare nulla di speciale alla sceneggiatura.

Per ulteriori dettagli sul comando osascript, consultare le pagine man . La pagina man fornisce un altro esempio in cui è possibile passare argomenti allo script.


0

Per sviluppare un servizio, è necessario un tipo di software che creerà un servizio come uno dei seguenti:

  1. Automatore per creare un flusso di lavoro
  2. Questo servizio per creare un servizio
  3. Xcode per creare un .app

Tutti i suddetti tipi di servizi sono pacchetti. Sono tutte cartelle che contengono un plist che specifica gli attributi di un servizio.

Ecco come ho creato un servizio utilizzando Automator che utilizza un'azione di Automator "Esegui AppleScript" per chiamare un .script esistente.

Servizio di automazione che chiama un AppleScript esistente

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.