J'essaie de configurer quelques raccourcis clavier qui ouvrent des sessions iTerm spécifiques, ce que j'ai pu faire avec BetterTouchTool et un peu de magie AppleScript. Le problème est que OS X insiste pour ouvrir une fenêtre de terminal pour tout script Shell que vous exécutez via l’interface graphique (à partir du Finder ou comme raccourci clavier de BetterTouchTool). La fenêtre du terminal n'apparaît pas si j'exécute le script directement à partir d'un autre terminal.
Une solution de contournement que j'ai trouvée consistait à envelopper le script dans un répertoire .app, ce qui résout le problème de la fenêtre de terminal superflue, mais présente d'autres problèmes (par exemple, OS X semble traiter chaque fenêtre iTerm résultante comme une application distincte, encombrant ainsi mon dock. ). (EDIT: ce problème a été causé par un bogue dans mon script, voir ci-dessous)
J'ai également essayé d'attribuer l'application Terminal à un autre bureau virtuel dans les paramètres Spaces pour tenter de la dissimuler, mais le système basculera d'abord sur ce bureau avant d'exécuter le script.
Est-il possible de désactiver complètement ce comportement? J'ai déjà trouvé le paramètre dans les préférences du terminal pour fermer la fenêtre une fois le script terminé, mais il est toujours ennuyeux de voir la fenêtre du terminal s'ouvrir pendant une seconde.
Ouvrez Automator , choisissez Application , ajoutez un Action d'exécution du script shell et insérez votre commande shell entre guillemets (si vous avez un fichier, vous pouvez simplement le faire glisser).
Autre que de jouer, vous pouvez maintenant enregistrer le (comme une application n'importe où) et même définir l'icône.
Voici un exemple rapide et sale avec presque aucun effort (pour une application nommée "myapp"):
Établissez une hiérarchie partielle des applications:
mkdir -p ./myapp.app/Contents/MacOS
Assurez-vous que la première ligne de votre script contient le chemin complet du programme requis, par exemple,
#!/bin/bash
Nommez votre script Shell "myapp" (sans guillemets, sans extension), donnez-lui les autorisations d'exécution, puis placez-le dans le sous-répertoire MacOS. Pour lui donner des autorisations d'exécution:
chmod ugo+x myapp
Allez dans le sous-répertoire Contents et créez un fichier PkgInfo contenant la chaîne: APPL ???? [pas de fin de ligne en fin de chaîne!] Utilisez l'utilitaire cat (1) pour créer le fichier:
cat > PkgInfo
APPL????
Après avoir tapé la chaîne (ne pas appuyer sur la touche Entrée!), Entrez deux Ctrl-D, qui se fermeront
le fichier sans fin de ligne et retournez à l'invite du shell.)
Double-cliquez sur votre nouvelle "application" dans le Finder. Il fonctionnera sans fenêtre.
Vous voudrez peut-être vérifier Platypus , qui crée des applications Mac OS X à partir de scripts Shell et d'autres scripts interprétés.
Voici une solution de contournement au cas où vous voudriez des lanceurs d’application tels que Alfred . Je l'utilise tous les jours et j'ai acheté le Powerpack , qui permet d'exécuter des scripts shell silencieux.
Ceux-ci n'ouvriront pas de terminal lors de l'exécution et peuvent être liés à n'importe quelle séquence de mots-clés. Ils peuvent même inclure des paramètres et avoir des options supplémentaires:
J'utilise ceci pour de petits extraits, et c'est très flexible.
Si vous ajoutez la clé LSUIElement
et la définissez sur 1
dans Info.plist
de votre application, cela ne créera pas d'icône dans le Dock.
Voici le Info.plist
de ma petite application de 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>
Il y a un autre entraînement possible. Sécurisez votre script Shell dans un flux de travail d'automateur. Invoquer le workflow avec launchd. Le code est:
/usr/bin/automator /path/to/the/file.workflow
Cela ne lancera aucun programme, ni ne s'affichera dans la barre de menus et sa manière plus silencieuse qu'une application Platypus.
Un moyen encore plus efficace d’exécuter des scripts Shell est direct dans launchd.
/bin/bash /path/to/shellScript.command
exécutera la commande ultra silencieusement en arrière-plan.
Voici un peu une solution de contournement:
Compilez un script qui appelle un script shell :)
osacompile -e 'do Shell script "cd ~; echo aaa > temp.txt"' -o ~/name_of_script.scpt
La osacompile
compilera l'extrait de code 'do Shell script "XXX"'
applescript. Votre script Shell est le XXX.
Faites attention aux citations, le script Shell doit être cité correctement pour aller au-delà du Shell que vous utilisez pour le compiler encore intact.
Mais cela peut être exécuté à partir de BetterTouchTool sans aucune astuce.