Comment exécuter un script bash dans Terminal?

108

J'ai un script bash comme:

#!/bin/bash

echo Hello world!

Comment exécuter cela dans le terminal?

Ballon
la source
27
At-il des autorisations d'exécution? Essayez un chmod +x scriptnameet puis ./scriptname.
dirkgently

Réponses:

49

$prompt: /path/to/scriptet appuyez sur Entrée. Notez que vous devez vous assurer que le script dispose des autorisations d'exécution.

prodigitalson
la source
1
Si vous êtes déjà dans le /path/to répertoire, par exemple avec la cd /path/tocommande, vous pouvez entrer ./scriptpour exécuter votre script. N'oubliez pas, dans ce cas, le './' avant 'script'
FrViPofm
120

Encore une autre façon de l'exécuter (cette fois sans définir les autorisations d'exécution):

bash /path/to/scriptname
Suspendu jusqu'à nouvel ordre.
la source
26

cd dans le répertoire qui contient le script, ou placez-le dans un dossier bin qui se trouve dans votre $ PATH

puis tapez

./scriptname.sh

si dans le même répertoire ou

scriptname.sh

s'il se trouve dans le dossier bin.

John Boker
la source
9
Cela ne fonctionnera que si le script a le bit d'exécution défini. Cela doit probablement être réglé.
Bryan Oakley
./scriptname.shfonctionne pour moi mais scriptname.shdonne scriptname.sh: command not found. -rwxr-xr-xsont ses autorisations.
Spikatrix
1
Le conseil de cdn'importe où à tous perpétue un autre malentendu courant pour les débutants. À moins que le script n'ait en interne des dépendances qui l'obligent à s'exécuter dans un répertoire particulier (comme, avoir besoin de lire un fichier de données sur lequel le script ne fournit inexplicablement pas d'option vers lequel pointer), vous ne devriez jamais avoir besoin d'aller cdn'importe où pour l'exécuter, et très ne voudra souvent pas.
tripleee
24

Vous pourriez faire:
sh scriptname.sh

xCra2yx
la source
6
Downvote: C'est faux si c'est correctement un script Bash.
tripleee
1
Upvote: C'est bien sur Mac OS X si votre script bash se trouve dans le même répertoire
Karl Taylor
30
@kot "Ça marche pour moi" est très loin de "c'est une bonne réponse". Cela peut fonctionner s'il shs'agit d'un lien symbolique vers bashou si le script n'utilise aucune construction spécifique à Bash. Dans le premier cas, utiliser bashau lieu de shest la seule solution correcte et portable; dans ce dernier cas, ce n'est pas la bonne réponse à cette question particulière, car l'OP a demandé des conseils pour un script Bash spécifiquement. Perpétrer la mauvaise réponse est irresponsable; les utilisateurs qui ne parviennent pas à saisir la différence publient fréquemment ici, et doivent être montrés pourquoi cette réponse «a fonctionné pour moi» n'a pas fonctionné pour eux.
tripleee
@kraftydevil too ^ Une des nombreuses cibles en double populaires sur ce sujet: stackoverflow.com/questions/5725296/…
tripleee
5
@kot Je le répète: il y a des situations où cela fonctionne (comme vous l'avez découvert) mais ce n'est pas une réponse correcte dans le cas général à la question dans le titre. À tout le moins, cette réponse devrait expliquer les conditions dans lesquelles cela fonctionne; mais ma suggestion serait de simplement supprimer cette réponse.
tripleee
14

Tout d' abord , vous devez le rendre exécutable en utilisant: chmod +x name_of_your_file_script.

Une fois que vous l'avez rendu exécutable, vous pouvez l'exécuter en utilisant ./same_name_of_your_file_script

Donald Shahini
la source
10

Changez votre répertoire vers l' emplacement du script à l'aide de la commande cd

Puis tapez

bash program-name.sh
gaurav07
la source
6
Il n'y a aucun besoin de cdn'importe où; vous pouvez spécifier un nom de chemin arbitrairement complexe comme argument de bash; en effet, tout programme qui prend un argument de nom de fichier fonctionne de cette façon (ou est terriblement, stupéfiant).
tripleee
10

C'est un vieux fil de discussion, mais je suis tombé dessus et je suis surpris que personne n'ait encore fourni de réponse complète. Alors voilà ...

Le didacticiel sur l'exécution d'un script de ligne de commande!

Q: Comment exécuter ceci dans le terminal?

Confusions et conflits:

  • Vous n'avez pas besoin d'une «extension» (comme .sh ou .py ou autre chose), mais cela aide à garder une trace des choses. Ça ne fera pas mal. Cependant, si le nom du script contient une extension, vous devez l'utiliser.
  • Vous n'avez pas du tout besoin d'être dans un certain répertoire pour quelque raison que ce soit.
  • Vous n'avez pas besoin de taper le nom du programme qui exécute le fichier (BASH ou Python ou autre) sauf si vous le souhaitez. Ça ne fera pas mal.
  • Vous ne pas besoin sudode faire tout cela. Cette commande est réservée à l'exécution de commandes en tant qu'autre utilisateur ou utilisateur «root» (administrateur). Super article ici .

(Une personne qui apprend juste à exécuter des scripts ne devrait pas utiliser cette commande à moins qu'il y ait un réel besoin, comme l'installation d'un nouveau programme. Un bon endroit pour mettre vos scripts est dans votre dossier ~ / bin. Vous pouvez y arriver en saisie cd ~/binou à cd $HOME/binpartir de l'invite du terminal. Vous disposerez des autorisations complètes sur ce dossier.)

Pour "exécuter ce script" depuis le terminal sur un système de type Unix / Linux, vous devez faire trois choses:

  1. Indiquez au système l'emplacement du script. (choisissez-en un)

    • Tapez le chemin complet avec le nom du script (par exemple /path/to/script.sh). Vous pouvez vérifier le chemin complet en tapant pwdou echo $PWDdans le terminal.
    • Exécutez à partir du même répertoire et utilisez ./pour le chemin (par exemple ./script.sh). Facile.
    • Placez le script dans un répertoire qui se trouve sur le système PATHet tapez simplement le nom (par exemple script.sh). Vous pouvez vérifier le système PATHen tapant echo $PATHou echo -e ${PATH//:/\\n}si vous voulez une liste plus nette.
  2. Dites au système que le script est autorisé à s'exécuter. (choisissez-en un)

    • Définissez le "bit d'exécution" en tapant chmod +x /path/to/script.shdans le terminal.
    • Vous pouvez également utiliser chmod 755 /path/to/script.shsi vous préférez les numéros. Il y a une excellente discussion avec un graphique sympa ici .
  3. Dites au système le type de script. (choisissez-en un)

    • Tapez le nom du programme avant le script. (par exemple BASH /path/to/script.shou PHP /path/to/script.php) Si le script a une extension, telle que .php ou .py, elle fait partie du nom du script et vous devez l'inclure.
    • Utilisez un shebang , que je vois que vous avez ( #!/bin/bash) dans votre exemple. Si vous l'avez comme première ligne de votre script, le système utilisera ce programme pour exécuter le script. Pas besoin de taper des programmes ou d'utiliser des extensions.
    • Utilisez un shebang «portable» . Vous pouvez également demander au système de choisir la version du programme qui se trouve en premier dans PATHen utilisant #!/usr/bin/envsuivi du nom du programme (par exemple #!/usr/bin/env bashou #!/usr/bin/env python3). Il y a des avantages et des inconvénients comme discuté en détail ici .
Michael Treanor
la source
1
Assez bon résumé. Peut-être que dans le dernier exemple, rappelez aux gens que script.shet script.phpsont les noms de fichiers littéraux de ces scripts, et que si vous mettez une extension dans le nom de fichier, vous devez l'inclure lorsque vous exécutez le script (et vice versa; si le script ne le fait pas) t avoir une extension, n'en mettez pas). Ceci est différent, par exemple, du DOS où vous pouvez omettre le .batou .exedu nom de fichier, et les fichiers doivent avoir une extension d'un petit ensemble pour être considérés comme exécutables.
tripleee
1
Une autre erreur de débutant commune incompréhension de la différence entre path, /path, ./pathet ~/path. Je suppose que vous ne voulez probablement pas l'expliquer ici, mais peut-être un lien vers une explication telle que ... oh dang, je devais poster ceci.
tripleee
1

Et encore une façon de plus

. /path/to/script

Quelle est la signification du point?

Manger chez Joes
la source
Cela exécute le script dans le shell actuel, qui doit être appelé. Ce n'est pas ce à quoi la plupart des gens s'attendent lorsque vous exécutez simplement un script. Cela peut avoir des effets secondaires sur votre environnement existant.
Software Engineer
-2

Si vous êtes dans un répertoire ou un dossier où le fichier de script est disponible, modifiez simplement l'autorisation du fichier en mode exécutable en faisant

chmod +x your_filename.sh

Après cela, vous exécuterez le script à l'aide de la commande suivante.

$ sudo ./your_filename.sh

Au dessus de "." représentent le répertoire courant. Remarque! Si vous n'êtes pas dans le répertoire où se trouve le fichier de script bash, vous modifiez le répertoire dans lequel se trouve le fichier en utilisant

cd Directory_name/write the complete path

commander. Sinon, votre script ne peut pas s'exécuter.

Hassan Shamshir
la source
J'espère que tout le monde fera cela parce que je mentionne tout le concept lié à ce problème particulier.
Hassan Shamshir
Comme expliqué dans d'autres réponses ici, sudoest faux et potentiellement horriblement faux si vous l'utilisez sur un script non fiable qui abuse des pouvoirs que vous lui avez inutilement donnés.
tripleee
Le conseil cdquelque part est difficile à comprendre, mais probablement aussi faux.
tripleee