Eseguire uno script di shell su OS X senza visualizzare una window di terminal?

Sto cercando di impostare alcune scorciatoie da tastiera che aprono le sessioni di iTerm specifiche, che ho potuto fare con BetterTouchTool e un po 'di magia AppleScript. Il problema è che OS X insiste nell'aprire una window Terminal per qualsiasi script di shell eseguito tramite la GUI (cioè da Finder o come collegamento da tastiera di BetterTouchTool). La window del terminal non viene visualizzata se eseguo lo script direttamente da un altro terminal.

Un'operazione che ho trovato è stato quello di avvolgere lo script in una directory di .app che risolve il problema della window terminal superflua, ma ha alcuni altri problemi (ad esempio OS X sembra trattare each window iTerm risultante come un'applicazione separata, schiacciando il mio dock ). (EDIT: questo comportmento è stato effettivamente causato da un bug nel mio script, vedi sotto)

Ho anche provato ad assegnare l'applicazione Terminal a un altro desktop virtuale nelle impostazioni di Spazi nel tentativo di spostarlo fuori dalla vista, ma allora dovrà prima passare a quel desktop prima di eseguire lo script.

C'è un modo per distriggersre completamente questo comportmento? Ho già trovato l'impostazione nelle preferenze Terminal per chiudere la window dopo che lo script è finito, ma è ancora fastidioso avere la window Terminal pop-up per un secondo.

Apri Automator , scegli Applica , aggiungi un'azione Run Shell Script e inserisci il command Shell tra le virgolette (se hai un file, puoi semplicemente trascinarlo).

Oltre a suonarla, ora puoi salvarlo (come app ovunque) e anche impostare l'icona .

Ecco una piccola soluzione, nel caso in cui tu voglia pianificare applicazioni come Alfred . Lo uso each giorno e ho comprato l' Powerpack , che ti permette di eseguire script di shell silenziosi.

immettere qui la descrizione dell'immagine

Questi non aprire un terminal durante l'esecuzione e possono essere associati a qualsiasi sequenza di parole chiave. Possono anche includere parametri e avere opzioni aggiuntive:

immettere qui la descrizione dell'immagine

Lo uso per alcuni piccoli frammenti, ed è molto flessibile.

Potresti voler controllare Platypus , che crea applicazioni Mac OS X dagli script di shell e da altri script interpretati.

Se aggiungi il tasto LSUIElement e lo imposta su 1 in Info.plist della tua app, non creerà un'icona nel Dock.

Ecco Info.plist della mia piccola shell script shell:

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleExecutable</key> <string>launch</string> <key>CFBundleIconFile</key> <string>launch</string> <key>LSUIElement</key> <string>1</string> </dict> </plist> 

Ecco un po 'di soluzioni:

Compilare un applescript che chiama uno script di shell 🙂

 osacompile -e 'do shell script "cd ~; echo aaa > temp.txt"' -o ~/name_of_script.scpt 

Il componente osacompile compilerà lo snippet di appletcript dello 'do shell script "XXX"' . Lo script di shell è XXX.

Attenzione alla citazione, lo script di shell deve essere citato correttamente per passare oltre la shell che stai usando per compilarla ancora intatta.

Ma questo può essere eseguito da BetterTouchTool senza alcunché.