Comment rendre ce fichier.sh exécutable par double-clic?

165

Tout d'abord, j'utilise Mac.

Ensuite, je dois exécuter ce "file.sh" que nous l'appellerons. Chaque fois que j'ai besoin de l'exécuter, je dois ouvrir le terminal et taper:

cd /Users/Jacob/Documents/folderWithFileInIt
bash file.sh

C'est correct, mais j'ai l'impression que ce serait beaucoup plus rapide si je fais exécuter le fichier en double-cliquant, tu ne crois pas?

Ma question est donc la suivante: comment rendre ce fichier exécutable par double-clic?

Mes idées étaient soit:

a) tapez quelque chose comme chmod dans le terminal et changez les permissions?

b) créer un fichier, y mettre le code que j'ai écrit dessus ^ puis rendre ce fichier exécutable?

c) faire une automatisation pour faire cela?

Quelle est la meilleure façon, ou y a-t-il une méthode encore meilleure? Veuillez également expliquer autant que vous le pouvez, je suis nouveau sur Terminal. Merci.

Jacob
la source
1
Si vous voulez un script agréable et facile à cliquer, alors oui, Automator est le bon outil. Vous semblez le savoir d'après votre question, alors quelle est votre question?
Rob Napier
même question mais j'ai jdk dmg, un dossier d'application pour créer des icônes, des Jar .. mais je n'ai pas réussi à exécuter / créer via automator ou .command
SANTOSH

Réponses:

350

Par défaut, les *.shfichiers sont ouverts dans un éditeur de texte (Xcode ou TextEdit). Pour créer un script shell qui s'exécutera dans le Terminal lorsque vous l'ouvrirez, nommez-le avec l'extension «command», par exemple file.command. Par défaut, ceux-ci sont envoyés au Terminal, qui exécutera le fichier en tant que script shell.

Vous devrez également vous assurer que le fichier est exécutable, par exemple:

chmod +x file.command

Sans cela, Terminal refusera de l'exécuter.

Notez que le script n'a pas à commencer par un #!préfixe dans ce scénario spécifique, car Terminal organise spécifiquement pour l'exécuter avec votre shell par défaut. (Bien sûr, vous pouvez ajouter une #!ligne si vous souhaitez personnaliser le shell utilisé ou si vous voulez vous assurer que vous pouvez l'exécuter à partir de la ligne de commande tout en utilisant un autre shell.)

Notez également que Terminal exécute le script shell sans changer le répertoire de travail. Vous devrez commencer votre script avec une cdcommande si vous en avez réellement besoin pour s'exécuter avec un répertoire de travail particulier.

Chris Page
la source
1
Merci pour la réponse plus utile.
Jacob
46
Vous pouvez également utiliser cd "`dirname "$0"`"pour définir le répertoire de travail actuel sur le répertoire où se trouve votre skript shell.
gearsdigital
3
Pour des raisons esthétiques, vous devez également faire un clic droit sur le fichier .command et ouvrir les infos. Là, vous avez la possibilité de masquer le suffixe (sous le nom et le suffixe).
Bijan
J'utilise cette méthode pour exécuter des applications via la open -n ...commande. Cela fonctionne, mais à chaque fois que la fenêtre du terminal s'ouvre et et me montre "[Processus terminé]". Est-il possible d'empêcher d'une manière ou d'une autre l'apparition de la fenêtre du terminal?
Nik
1
@Nik Il ne sert à rien de l'exécuter dans Terminal si vous ne voulez pas qu'il apparaisse dans une fenêtre de terminal. Au lieu de cela, faites-en un ensemble d'applications dont l'exécutable est un script shebang. Ou créez une applet AppleScript ou Automator qui exécute le script. Vous pouvez également utiliser les préférences du terminal pour modifier le profil afin de fermer la fenêtre lorsque le processus se termine, mais ce n'est pas la meilleure solution si vous souhaitez simplement exécuter un script shell sans interaction de l'utilisateur.
Chris Page
31

Supprimez complètement l'extension, puis double-cliquez dessus. La plupart des scripts shell système sont comme ça. Tant qu'il a un shebang, cela fonctionnera.

NobleUplift
la source
1
BTW, "shebang" est principalement cette ligne devant toutes les lignes: #! / Bin / sh mais cela peut être différent, lisez le lien fourni pour d'autres cas.
Lukas Liesis
Cette approche n'a-t-elle pas besoin de faire chmod?
Atul le
11

Vous pouvez simplement dire au Finder d'ouvrir le .shfichier dans Terminal:

  1. Sélectionnez le fichier
  2. Obtenir des informations (cmd-i) dessus
  3. Dans la section «Ouvrir avec», choisissez «Autre…» dans le menu contextuel
  4. Choisissez Terminal comme application

Cela aura exactement le même effet que de le renommer .commandsauf… vous n'avez pas à le renommer :)

Markus Amalthea Magnuson
la source
8
  1. Terminal de lancement
  2. Tapez -> nano fileName
  3. Collez le contenu du fichier Batch et enregistrez-le
  4. Tapez -> chmod + x nom de fichier
  5. Il va créer un fichier exe maintenant vous pouvez double-cliquer et il.

Le nom du fichier doit être placé entre guillemets. Puisque j'utilise Mac-> Dans mon cas, le contenu du fichier batch est

cd / Users / yourName / Documents / SeleniumServer

java -jar selenium-server-standalone-3.3.1.jar -role hub

Cela fonctionnera à coup sûr

Manish
la source
0

vous pouvez changer le fichier exécutable en utilisant chmodcomme ceci

chmod 755 file.sh

et utilisez cette commande pour exécuter

./file.sh
Codeur de nuit
la source
Bienvenue à SO! Votre réponse n'ajoute rien à la réponse déjà acceptée. Veuillez expliquer pourquoi est-ce différent des autres réponses qui existent déjà.
GabrielOshiro le