Je me suis retrouvé dans une ornière récemment avec un projet que j'ai essayé d'accomplir. J'utilise Automator, mais je ne sais pas comment procéder exactement pour ce projet. Il y a cette application d'édition script appelée Brackets, et je veux faire en sorte que chaque fois que l'application est ouverte, la commande script connue sous le nom de tty.js soit exécutée. Toute aide que je peux obtenir serait formidable
Réponses
Trop de publicités?Ce que vous pouvez essayer, c'est d'aller dans le dossier .app de l'application et de renommer le binaire, en créant un fichier script (marqué exécutable) nommé comme l'exécutable l'était auparavant et qui contiendra une référence à l'exécutable maintenant renommé avec ce que vous êtes en train de scripter, par exemple.
cd /Applications/Brackets.app/Contents/MacOS
mv Brackets BracketsReal
echo "tty.js" > Brackets
echo "BracketsReal &" >> Brackets
chmod +x Brackets
Cela devrait créer un texte script qui lance votre script et l'application ensuite...
modifier
scripts en Appname.app/Contents/MacOS/
sont pris en charge.
La première ligne #!/bin/sh
(alias shebang
) est nécessaire
La technique pour déplacer l'exécutable réel et le faire exécuter à partir d'un script est appelée wrapping
et est également utilisé à partir d'applications comme Gimp ou XQuartz (Xorg/X11) sur MacOS.
Si je comprends bien ce que l'utilisateur essayait de faire, lancer Bracket et ouvrir automatiquement le fichier tty.js
à part les manquants shebang
il faut une autre considération.
Pour envelopper correctement BracketsReal, Brackets devrait être quelque chose comme :
#!/bin/sh
exec "$(dirname "$0")/BracketsReal"
Cela devrait fonctionner comme si nous n'avions jamais déplacé Brackets vers BracketsReal.
exec
est une commande intégrée du Shell.
$0
est un argument spécial passé par le système au Shell Shell exécuté, lorsqu'il est exécuté avec un cliquez sur doit être le chemin complet du script :
/Applications/Brackets.app/Contents/MacOS/Brackets
dirname
est une commande Shell pour obtenir uniquement la partie répertoire sans le nom du fichier, $( )
est une substitution de commande, une fois exécutée la ligne deviendra :
exec /Applications/Brackets.app/Contents/MacOS/BracketsReal
A tel point que nous pouvons déplacer l'application de /Applications
dans d'autres dossiers et devrait quand même l'exécuter.
A ce stade, nous devons vérifier que BracketsReal
(probablement un script lui-même) accepte les fichiers à ouvrir comme arguments sur la ligne de commande (et éventuellement s'il requiert une syntaxe spéciale) s'il accepte des arguments alors la ligne deviendrait quelque chose comme :
exec "$(dirname "$0")/BracketsReal" "/path/to/the/file/tty.js"
Dernière remarque, pour vérifier si quelque chose ne va pas avec le wrapper script il suffit d'ouvrir un terminal et de lancer le wrapper, à l'invite du terminal il suffit de taper/coller :
/Applications/Brackets.app/Contents/MacOS/Brackets
les privilèges ou les erreurs de syntaxe sont imprimés dans la fenêtre du terminal.
Maestro du clavier dispose d'une option permettant d'exécuter une macro lors du lancement d'une application :
Vous pouvez également attribuer un raccourci à un script comme open -a Brackets;tty.js
et ensuite toujours utiliser ce script pour ouvrir Brackets.