257 votes

Comment exécuter un shell script dans OS X en double-cliquant ?

J'ai un shell script qui a l'autorisation d'exécution par l'utilisateur sous OS X, mais lorsque je double-clique dessus, il s'ouvre dans un éditeur de texte. Comment puis-je faire en sorte qu'il s'exécute en double-cliquant dessus ?

296voto

Naxom Points 694
  • Tout d'abord dans le terminal rendez le script exécutable en tapant la commande suivante :

      chmod a+x yourscriptname
  • Ensuite, dans le Finder, cliquez avec le bouton droit de la souris sur votre fichier et sélectionnez "Ouvrir avec", puis "Autre...".

  • Ici, vous sélectionnez l'application dans laquelle vous voulez que le fichier soit exécuté, dans ce cas, ce sera Terminal. Pour pouvoir sélectionner Terminal, vous devez passer de "Applications recommandées" à "Toutes les applications". (L'application Terminal.app se trouve dans le dossier Utilities).

  • REMARQUE : à moins que vous ne souhaitiez associer tous les fichiers avec cette extension pour qu'ils soient exécutés dans le terminal, vous ne devez pas cocher la case "Toujours ouvrir avec".

  • Après avoir cliqué sur OK, vous devriez pouvoir exécuter votre script en le double-cliquant simplement.

0 votes

Merci j'ai compris, je ne savais pas qu'il fallait associer avec le terminal, je pensais qu'il fallait associer avec /bin/sh

28 votes

Je n'ai pas pu trouver Terminal.app dans la liste jusqu'à ce que je réalise que je devais regarder dans le dossier "Utilities". J'espère que cela fera gagner du temps à quelqu'un.

37 votes

Sur OSX 10.8 et plus, un exécutable script dont les noms ont soit pas de suffixe ou suffixe .command es par défaut à partir du Finder, sans avoir besoin d'indiquer au Finder comment l'ouvrir.

261voto

Hagelin Points 6754

Avez-vous essayé d'utiliser le .command l'extension du nom de fichier ?

3 votes

C'est mieux. Dans la réponse de @Lus, le dossier de travail n'est pas le même que celui dans lequel on ouvre le script.

9 votes

Existe-t-il un moyen de lancer des tâches "en arrière-plan" sans fenêtre de console ?

8 votes

Veuillez noter que le répertoire courant peut ne pas être celui où se trouve votre script. Jetez un coup d'oeil à cette question pour le définir correctement : stackoverflow.com/questions/59895/

173voto

mklement0 Points 12597

A partir d'OSX 10.10 (Yosemite) et depuis au moins OS X 10.8 (Mountain Lion) le comportement est le suivant lorsque vous ouvrir (double-clic) scripts exécutables de Finder :

  • Exécutable scripts [1] avec soit Pas de suffixe o suffixe .command :
  • sont exécuté par défaut - aucune installation requise :
    • a nouveau Une fenêtre de terminal s'ouvre dans laquelle le script s'exécute.
    • par défaut, la fenêtre restera ouvrir après que le script se termine pour que vous puissiez inspecter le résultat (bien qu'à ce moment-là, l'interpréteur de commandes qui a exécuté le script a quitté et vous ne pouvez pas interagir avec elle plus longtemps ).
      Toutefois, grâce à la fonction Preferences... > Profiles vous pouvez opter pour l'automatisation fermer la fenêtre lorsque le script sort.
  • Caveat : le Dossier de travail est invariablement le de l'utilisateur actuel dossier personnel PAS le dossier dans lequel se trouve le script.
    • Pour qu'un shell script modifie le dossier dans lequel il se trouve, placez
      • cd -- "$(dirname "$BASH_SOURCE")" juste après la ligne shebang
      • ou, si vous devez rester conforme à POSIX, cd -- "$(dirname "$0")" .
      • Pour les cas limites, tels que la recherche d'un lien symétrique Le véritable répertoire source du script, cf. cette réponse .
  • Si le script est inopinément no exécutable :
    • Rendez-le exécutable en exécutant chmod +x <script> dans le Terminal ; sinon, vous verrez les symptômes suivants :
    • .command : Le Finder affiche un message d'erreur trompeur qui suggère que le problème peut être résolu par les moyens suivants File > Get Info ce qui n'est pas vrai - utilisez l'option chmod +x méthode suggérée ci-dessus.
    • aucun suffixe :
      • avec une ligne shebang (par exemple, #!/bin/bash ) : le comportement est le même que si le suffixe était .sh - voir ci-dessous.
      • avec pas de ligne shebang : ouvre dans votre éditeur de texte par défaut (qui est TextEdit par défaut).
  • Scripts avec suffixe .sh qu'ils soient exécutables ou non :
  • sont ouvert pour édition sur TextEdit.app ou, si elle est installée, avec Xcode.app .
  • Scripts avec suffixe .scpt o .applescript (même s'ils sont eux-mêmes marqués comme exécutables, ce qui n'est normalement pas le cas) :
    • ouvert pour édition sur [Apple]Script Editor
    • Notez que le JXA Les fichiers de code source ne semblent pas avoir de suffixe distinct (encore).
  • Scripts avec a personnalisé suffixe (un suffixe non encore connu du système), qu'il soit exécutable ou non (en fait, cela s'applique à tout type de fichier) :
    • prompt vous pour que l'application les ouvre avec quand vous premièrement les ouvrir y rappelez-vous ce choix .

[1] Exécutable signifie : un script avec le(s) bit(s) de permission exécutable(s) activé(s) et l'utilisateur appelant - par rapport à la propriété du fichier - étant donc potentiellement autorisé à l'exécuter.
Si vous utilisez chmod a+x pour fixer todo bits de permission (ce qui est typique), quelqu'un peuvent l'invoquer (en supposant qu'ils soient également autorisés à leer le fichier sur la base du leer bit(s) de permission et la propriété du fichier).

1 votes

Il est possible de fermer la fenêtre de Terminal ouverte lorsque le script sort avec un simple osascript vous pouvez l'inclure dans le .command au lieu de modifier manuellement le profil.

0 votes

@I'L'I : Voulez-vous dire ajouter une osascript -e '...' à la fin de son script ? Quelle est cette commande spécifique, et permet-elle de s'assurer que le bon onglet est fermé même si le script n'est pas exécuté dans l'onglet le plus en avant ?

5 votes

@mklement0 : Oui, je ne l'ai pas testé plus de quelques minutes, mais l'idée de base est d'inclure sur la dernière ligne de l' .commande script : osascript -e 'tell application "Terminal" to close front window' > /dev/null 2>&1 & ... Cela peut ne pas fonctionner dans tous les scénarios, bien que la redirection à la fin soit vraiment la clé - l'osascript peut autrement être adapté facilement (ex. fenêtre devra peut-être être modifié en onglet si c'est le comportement par défaut de votre terminal, etc.)

39voto

svth Points 694

Alternativement, vous pouvez créer une application Mac OS X normale à partir de votre script en utilisant L'ornithorynque

0 votes

C'est une application vraiment géniale. Mais j'ai un problème ici. J'ai un script python que je veux convertir en fichier .app. Mon script comprend une ligne où l'utilisateur doit taper une entrée (raw_input()), lorsque le .app atteint cette ligne de code, il lance une erreur EOF (end of file). Que puis-je faire ?

1 votes

Il ne s'agit pas d'un terminal interactif. Platypus présente simplement une sortie script. Il n'y a pas de communication bidirectionnelle.

5 votes

Ou créez une application OS X avec Automator en utilisant l'action Exécuter Shell script.

22voto

wisbucky Points 829

Le moyen le plus simple est de changer l'extension en .command ou pas d'extension.

Mais cela ouvrira le terminal, et vous devrez le fermer. Si vous ne voulez pas voir de sortie, vous pouvez utiliser Automator pour créer une application Mac que vous pouvez double-cliquer, ajouter au dock, etc.

  1. Ouvrir Automator application
  2. Choisissez le type "Application".
  3. Tapez "run" dans le champ de recherche Actions
  4. Double-cliquez sur "Run Shell script".
  5. Cliquez sur le bouton Run dans le coin supérieur droit pour le tester.
  6. File > Save pour créer l'application.

enter image description here

0 votes

Super ! Comment pouvons-nous automatiser ce flux de travail pour qu'il soit exécuté tous les jours à 13 heures ?

0 votes

Planifier le flux de travail en utilisant chron

0 votes

Ou vous pouvez faire la 3eme étape de cet article après avoir changé l'extension en .commandhttps://medium.com/@nooneypradeep/double-click-to-execute-a-shell-script-in-mac-os-monterey-3-steps-2f6f80939f48

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X