2 votes

Comment automatiser l'exécution de Shell Shell lorsque j'ouvre une application particulière dans OSX ?

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

3voto

Sergey N Lukin Points 141

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.

1voto

Dave Points 986

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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X