Esecuzione di script Shell dal Dock di OS X?


160

Come configuro uno script di shell da eseguire dal dock di Mac OSX? Sembra che semplicemente creando un collegamento si aprirà il file nel mio editor. C'è un flag che devo impostare da qualche parte per dire che deve essere eseguito invece di aprirlo per la modifica?


2
dovrebbe +1 solo per l'avatar, anche se mi piace anche l'argomento.
Matt Bannert,

Potresti considerare di cambiare le risposte accettate alla seconda @Wilco. Penso che sia una risposta migliore.
Grey,

Risposte:


190

È possibile creare un flusso di lavoro di Automator con un solo passaggio: "Esegui script shell"

Quindi File > Save As, e modificare il formato del file in "Applicazione". Quando si apre l'applicazione, verrà eseguita l'istruzione Shell Script, eseguendo il comando ed uscendo al termine.

Il vantaggio è che è davvero semplice da fare e puoi facilmente ottenere l'input dell'utente (diciamo, selezionando un mucchio di file), quindi passarlo all'input dello script della shell (a stdin o come argomento).

(Automator è nella tua /Applicationscartella!)

Esempio di flusso di lavoro


6
@dbr, pulsante per la GUI! :) Sto scherzando, è un buon suggerimento!
Willasaywhat

Sì, è stato un suggerimento eccellente :) Ho anche scritto azioni di Automator per alcune delle mie app e me ne dimentico ancora in momenti come questo :)
Jason Coco,

Non riesco a farlo funzionare con nohup, alla "nohup / usr / bin / myscript &; disown -a && exit 0". Ho bisogno dell'app / flusso di lavoro per eseguire uno script e uscire immediatamente. Qualche idea? :-)
hourback

3
@martineau Se si apre l'applicazione facendo open -a SomeAppThing.app --args --etc=2ciò dovrebbe concentrarsi. In alternativa puoi focalizzarlo usando Applescript (es. osascript -e 'tell application "Google Chrome" to activate')
dbr

1
Nota: se lo script avvia un'app GUI che rimarrà aperta per un po ', questo mostrerà un'icona a forma di ingranaggio che gira costantemente nella barra delle applicazioni fino a quando l'app non viene chiusa. Una soluzione è aggiungere `&> / dev / null &` alla riga di avvio dello script in modo che Automator non aspetti.
ewall

50

Se non hai bisogno di una finestra Terminale, puoi rendere un'applicazione eseguibile qualsiasi file semplicemente creando uno script shell Examplee spostandolo nel nome file Example.app/Contents/MacOS/Example. Puoi inserire questa nuova applicazione nel tuo dock come qualsiasi altra, ed eseguirla con un clic.

NOTA: il nome dell'app deve corrispondere esattamente al nome dello script. Quindi deve essere Example.appla Contents/MacOSdirectory di livello superiore e lo script nella sottodirectory deve essere nominato Examplee lo script deve essere eseguibile.

Se devi visualizzare la finestra del terminale, non ho una soluzione semplice. Probabilmente potresti fare qualcosa con Applescript, ma non è molto pulito.


1
Non capisci se esiste un modo semplice per far passare i file come argomenti allo script della shell? Per i file aperti utilizzando "Apri con ...".
Fuzzy76,

9
Per chiunque cerchi di farlo, il nome dell'app deve corrispondere esattamente al nome dello script. Quindi deve essere davvero example.sh.app, non solo example.app. Riceverai un avviso sull'app danneggiata se questi non corrispondono
Chiudi il

1
Per chiarire - sono un noob OSX - intendi semplicemente creare una struttura di cartelle come quella mostrata nel tuo esempio con il file di script inserito come mostrato?
martineau,

2
@martineau Sì, è corretto. Se si crea una cartella il cui nome termina in .appe con quella struttura, verrà trattata come un'applicazione eseguibile. Se vuoi guardare il contenuto di quella cartella nel Finder, dovrai fare clic con il tasto destro su di esso e selezionare "visualizza il contenuto del pacchetto" (perché facendo doppio clic su di esso verrebbe eseguita l'applicazione). Nel Terminale, sembrerà solo essere una cartella. (Non sono sicuro se Finder ti consentirà di rinominare la cartella in .app da sola; potrebbe essere necessario effettuare la ridenominazione nel Terminale.)
Jeremy Banks,

1
Ho appena tentato di farlo e ho ricevuto un errore in El Capitan (10.11) di: "Impossibile aprire .... perché le applicazioni powerpc non sono più supportate." : D È abbastanza interessante!
AllenH,

26

Su OSX Mavericks:

  1. Crea il tuo script di shell.
  2. Rendi eseguibile il tuo script di shell:

    chmod +x your-shell-script.sh
  3. Rinomina il tuo script per avere un .appsuffisso:

    mv your-shell-script.sh your-shell-script.app
  4. Trascina lo script sul dock OSX.
  5. Rinomina lo script in un .shsuffisso:

    mv your-shell-script.app your-shell-script.sh
  6. Fai clic con il tasto destro del mouse sul Finder e fai clic sull'opzione "Ottieni informazioni".
  7. Nella parte inferiore della finestra, imposta lo script della shell per aprirlo con il terminale.

Ora, quando fai clic sullo script nel dock, apparirà una finestra terminale ed eseguirà il tuo script.

Bonus: per fare in modo che il terminale si chiuda quando lo script è stato completato, aggiungere exit 0alla fine e modificare le impostazioni del terminale per "chiudere la shell se è uscito in modo pulito" come si dice faccia in questa risposta SO .


Bello, questo ha funzionato per me, in ogni caso per caso l'icona che mi chiedo. Cordiali saluti: Anche il passaggio 7 si riferisce al file e non alla voce di menu ...
Mike Q,

il modo carino! solo tutto .sh con terminale aperto.
iHTCboy,

@ stiemannkj1, mostra l'icona mentre l'app è in esecuzione? Esiste un modo per nasconderlo?
Pacerier,

@Pacerier, scusa, non sono più su OSX (passato a Linux :)). Potresti provare la risposta di Jeremy Bank . Non ho altre idee e dal momento che non ho OSX, non posso testare o pasticciare con nulla per provare a mostrare / nascondere l'icona ..
stiemannkj1

17

So che è vecchio ma nel caso sia utile ad altri:

Se devi eseguire uno script e vuoi che il terminale si apra in modo da poter vedere i risultati che puoi fare come ha detto Abyss Knight e cambiare l'estensione in .command. Se fai doppio clic su di esso, si aprirà una finestra del terminale ed eseguirà.

Tuttavia, avevo bisogno che funzionasse da automator o appleScript. Quindi per ottenere questo per aprire un nuovo terminale il comando che ho eseguito da "esegui script di shell" era "apri myShellScript.command" e si apriva in un nuovo terminale.


meraviglioso, grazie! Ora tutti hanno bisogno di renderlo una soluzione perfetta sarebbe un modo per chiudere la finestra del terminale al termine dello script.
Peter M,

1
bene se hai una finestra di chiusura all'uscita selezionata nelle preferenze del terminale puoi aggiungere il comando exit allo script e avrai quello che vuoi.
Jason Tholstrup,

7

Finché lo script è eseguibile e non ha alcuna estensione, è possibile trascinarlo così com'è sul lato destro (lato Documento) del Dock e verrà eseguito in una finestra terminale quando si fa clic invece di aprire un editor.

Se vuoi avere un'estensione (come foo.sh), puoi andare alla finestra delle informazioni sul file in Finder e modificare l'applicazione predefinita per quel particolare script da qualunque esso sia (TextEdit, TextMate, qualunque impostazione predefinita sia impostata sul tuo computer per file .sh) al terminale. Verrà quindi eseguito invece di aprirsi in un editor di testo. Ancora una volta, dovrai trascinarlo sul lato destro del Dock.


1
NOTA : Funziona come un campione in OS X 10.10 Yosemite. Non posso commentare il 10.9
Bryan Ash,

1
Funziona il 10.11. Grazie!
Yassine Imounachen,

Funziona anche il 10.12! Forse il mio commento su 10.9 era errato, ma ho notato che è necessario assicurarsi di trascinarlo nella parte del dock sotto il separatore. Purtroppo non ho modo di riprovare 10.9.
stiemannkj1,

Non è necessario aggiungerlo al Dock. Può essere eseguito dal desktop. Ma non può esserci estensione. Renderlo eseguibile e puoi semplicemente fare doppio clic. Questa è l'opzione più semplice che abbia mai visto.
Rich Apodaca,

5

Penso che questo thread possa essere utile: http://forums.macosxhints.com/archive/index.php/t-70973.html

Per parafrasare, puoi rinominarlo con l'estensione .command o creare un AppleScript per eseguire la shell.


Almeno su Snow Leopard, l'aggiunta di un'estensione .command a uno script lo fa funzionare nel terminale se fai doppio clic su di esso, ma per qualche motivo non puoi ancora trascinarlo nel dock. I suggerimenti di dbr e Jeremy hanno funzionato entrambi per me.
Jo Liss,

5

Come accennato da joe, la creazione dello script shell e quindi la creazione di uno script applecript per chiamare lo script shell, lo faranno ed è abbastanza utile.

Shell Script

  1. Crea il tuo script shell nel tuo editor di testo preferito, ad esempio:

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (questo esegue l'eseguibile w32, usando il framework mono)

  2. Salva script di shell, ad esempio "StartKeepass.sh"

Apple Script

  1. Apri AppleScript Editor e chiama lo script della shell

    do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges

    • do shell script - comando applecript per chiamare comandi shell esterni
    • "sh ...." - questo è il tuo script di shell (percorso completo) creato nel primo passaggio (puoi anche eseguire comandi diretti, potrei omettere lo script di shell ed eseguire il mio comando mono qui)
    • user name - dichiara a applecript che si desidera eseguire il comando come utente specifico
    • "<enter username here> - sostituisci con il tuo nome utente (mantenendo le virgolette) ex "josh"
    • password - Dichiara a applecript la tua password
    • "<enter password here>" - sostituisci con la tua password (mantenendo le virgolette) ex "mypass"
    • with administrative privileges - dichiara che si desidera eseguire come amministratore

Crea il tuo .APP

  1. salva il tuo applecript come nomefile.scpt, nel mio caso RunKeepass.scpt

  2. salva come ... il tuo applecript e modifica il formato del file in applicazione, risultando nel mio caso RunKeepass.app

  3. Copia il file dell'app nella cartella delle app


5

Nell'editor degli script:

do shell script "/full/path/to/your/script -with 'all desired args'"

Salva come pacchetto di applicazioni.

Finché tutto ciò che vuoi fare è ottenere l'effetto dello script, questo funzionerà bene. Non vedrai STDOUT o STDERR.


2
Vorrei suggerire: "Salva come applicazione PACCHETTO". I bundle si avviano molto più velocemente delle applicazioni.
e.James,

-3

Qualcuno ha scritto ...

Ho appena impostato tutti i file che terminano in ".sh" per aprirsi con Terminal. Funziona bene e non è necessario modificare il nome di ogni script shell che si desidera eseguire.

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.