Comment exécuter des scripts de ligne de commande?

17

Sous Windows, je peux créer des .batfichiers. Je double-clique dessus et toutes les lignes sont interprétées comme si je l'avais entré dans la console.

Sous OS X, quel fichier ou programme dois-je utiliser? Si je veux écrire un fichier avec;

 echo hello world

Je veux double-cliquer sur ce fichier et l'exécuter dans une console. Comment je fais ça?

Rodrigo
la source
le fichier doit-il être exécuté lorsque vous double-cliquez dessus, ou voulez-vous simplement exécuter le fichier en tapant le nom du fichier?
Phil M
le fichier double-cliqué est plus rapide :)
Rodrigo

Réponses:

24

Les fondements des terminaux sous OS X sont les mêmes que ceux utilisés sous Linux. Ce que vous recherchez spécifiquement est communément appelé "Shell Scripting".

Le shell par défaut lorsque vous ouvrez Terminal.app(situé dans /Applications/Utilties) est le shell bash.

OS X a eu un gestionnaire de shell intégré accessible via le Finder et d'autres applications via l' .commandextension, mais malheureusement pas via l' .shextension. Cependant, configurer le script pour qu'il s'exécute via le Finder est encore plus compliqué.

  1. Créez un script shell simple, comme votre exemple, j'ai fait une application Hello World:
#!/bin/bash
echo "Hello World"
  1. Enregistrez ce fichier sous HelloWorld.command.

  2. Donnez à ce fichier l'autorisation d'être exécuté. chmod u+x HelloWorld.commanddevrait le faire.

  3. Ouvrez le répertoire dans lequel vous avez enregistré ce fichier dans le Finder. Double-cliquez ensuite sur le HelloWorld.commandfichier.

Cela ouvrira un terminal et exécutera le script, la sortie sur mon ordinateur est la suivante:

$ /Users/jason/Applications/HelloWorld.command; sortie; Déconnexion
Hello World

[Processus terminé]

L'autre façon d'exécuter ce fichier est tout en restant dans le terminal vous-même, émettez simplement en ./HelloWorld.commandsupposant que vous êtes dans le même répertoire que le fichier.

Cela se traduira par une sortie beaucoup plus simple:

Applications jason-mac $ ./HelloWorld.command
Hello World
Applications jason-mac $

Vous venez de créer et d'exécuter un script shell sous OS X!

Jason Salaz
la source
En passant: il est ridiculement frustrant que OS X ne le fasse pas avec des fichiers ".sh", seulement des fichiers ".command". Oui, il est possible de changer cela, mais la commande existe déjà, c'est donc ma solution suggérée.
Jason Salaz
Voulez-vous poser la question comment injecter .sh dans la base de données des services de lancement ou dois-je le faire?
bmike
Vous avez évidemment eu l'idée (la pensée ne m'a même pas traversé l'esprit), vous êtes donc les bienvenus.
Jason Salaz
J'ai eu l'idée de vous - c'est parti, je vais tout demander seul ...
bmike
Ça me donne:chown: u+x: Invalid argument
Rodrigo
4

L'équivalent de la console ou de l'invite de commande dans Windows est l'application Terminal située dans / Applications / Utilitaires /

L'équivalent de DOS (ou peu importe comment ils l'appellent de nos jours) est "bash"

L'équivalent d'un fichier batch (.bat) sous Windows est un script shell (.sh)

Faites simplement une recherche Google pour "bash" "référence" et vous comprendrez le reste. Je recommanderais également d'acheter le Bash Cookbook (O'Reilly).

Plus précisément, ce serait ce que vous saisiriez dans une fenêtre de terminal pour obtenir votre script "hello world":

Pour créer le fichier:

    echo "echo hello world" > file.sh

Pour modifier les autorisations pour rendre le fichier exécutable:

    chmod 755 file.sh

Pour exécuter le script:

    ./file.sh

Si vous souhaitez pouvoir double-cliquer dessus dans le Finder, cliquez avec le bouton droit (ou contrôle-clic) sur le fichier et sélectionnez Obtenir des informations, puis sous Ouvrir avec, sélectionnez l'application Terminal. Ou vous pouvez utiliser l'extension .command au lieu de l'extension .sh.

Phil M
la source
2

Vous voudrez probablement jeter un œil à AppleScript. Ce livre de Sal Soghoian est considéré par beaucoup comme le livre incontournable sur AppleScript.

Une autre façon intéressante pour les utilisateurs d'automatiser les applications Mac est d'utiliser Automator . Vous pouvez également essayer. J'espère que cela t'aides.

Mise à jour

Il semble que vous recherchiez quelque chose comme les scripts shell Unix. Ces deux tutoriels sont décents et semblent couvrir les bases.

Christian Correa
la source
J'ai vu cela, mais l'AppleScript n'est pas le script de terminal. Je pense que vous pouvez faire: "Aller au terminal et écrire la commande x". Eh bien, n'est-ce pas le style .bat (et un peu plus difficile)
Rodrigo
Il semble que les scripts shell Unix soient ce que vous recherchez.
Christian Correa
0

Scripts shell. Je ne pense pas que Ask Different serait l'endroit approprié pour en discuter en profondeur, mais il y a un guide très détaillé ici: http://tldp.org/LDP/abs/html/index.html

Mac OS X est certifié UNIX à partir de la version 10.5 (à droite?), Cette sagesse s'applique donc également à Linux et à d'autres systèmes d'exploitation de type UNIX.

(d'une manière moins complexe, Automator de Mac OS X est sacrément puissant, tout comme l'éditeur AppleScript, qui peuvent tous deux exécuter des scripts shell et d'autres commandes avec des programmes, et les regrouper dans un ensemble .app pratique pour Launchpad ou partager avec copains)

Swizzlr
la source
Depuis l'introduction du guide, j'ai lié: "Un programme shell, appelé script, est un outil facile à utiliser pour créer des applications en" collant "les appels système, les outils, les utilitaires et les binaires compilés. La quasi-totalité du répertoire de Les commandes, utilitaires et outils UNIX peuvent être invoqués par un script shell. Si cela ne suffisait pas, les commandes shell internes, telles que les tests et les constructions de boucles, confèrent une puissance et une flexibilité supplémentaires aux scripts. "
Swizzlr
Et par "endroit approprié", je pense que le script shell est vraiment mieux discuté sur SuperUser: superuser.com/questions/tagged/shell-script
Swizzlr
-2

Pour mac est le fichier .sh aka script Shell

Davide
la source
Mais lorsque vous l'appelez depuis le Finder, vous voudrez l'utiliser .command. .shest un type de fichier non géré par le Finder (par défaut).
Jason Salaz