277 votes

Comment exécuter un shell script sans utiliser les commandes "sh" ou "bash" ?

J'ai un shell script que je veux exécuter sans utiliser les commandes "sh" ou "bash". Par exemple :

Au lieu de : sh script.sh

Je veux utiliser : script.sh

Comment puis-je le faire ?

P.S. (i) Je n'utilise pas beaucoup le shell script et j'ai essayé de lire sur les alias, mais je n'ai pas compris comment les utiliser.

(ii) J'ai également lu qu'il fallait lier le script avec un autre fichier dans les variables PATH. J'utilise le serveur de mon université et je n'ai pas les autorisations nécessaires pour créer un fichier à ces emplacements.

1 votes

Les réponses indiquent comment rendre le script exécutable, mais ne semblent pas couvrir comment le rendre accessible. Pour cela, créez vous-même un répertoire bin - $HOME/bin - si vous n'en avez pas déjà un, ajoutez-le à votre PATH (près du début). Mettez les scripts (et tout autre programme) que vous voulez exécuter directement sans spécifier le nom du chemin ici, ou des liens symboliques ici vers l'endroit où se trouvent les programmes réels.

1 votes

Après avoir suivi la ou les réponses ci-dessous, pour supprimer le ".sh", vous pouvez renommer le fichier : mv example.sh example et ensuite example devrait fonctionner par lui-même.

460voto

fge Points 40850

Ajoutez un "shebang" en haut de votre fichier :

#!/bin/bash

Et rendez votre fichier exécutable ( chmod +x script.sh ).

Enfin, modifiez votre chemin pour ajouter le répertoire où se trouve votre script :

export PATH=$PATH:/appropriate/directory

(en général, vous voulez $HOME/bin pour stocker vos propres scripts)

0 votes

Merci pour votre réponse. J'ai essayé. Maintenant je peux l'exécuter sans la commande "sh". Mais je dois toujours préfixer la commande avec "./", ce que je ne veux pas faire :)

5 votes

Voir les commentaires sur le chemin. Vous devez placer votre script dans un répertoire que vous devez ajouter à votre PATH.

2 votes

Cela n'a pas fonctionné dans mon cas. mais source script.sh a bien fonctionné, ou plutôt source <filename_without_any_extension_type>

74voto

jaypal Points 34440

Ce sont les conditions préalables à l'utilisation directe du nom script :

  1. Ajoutez la ligne shebang ( #!/bin/bash ) tout en haut.
  2. Utilisez chmod u+x scriptname pour rendre le script exécutable (où scriptname est le nom de votre script).
  3. Placez le script sous la rubrique /usr/local/bin dossier.
    • Note : Je suggère de le placer sous /usr/local/bin car il est fort probable que ce chemin soit déjà ajouté à vos PATH variable.
  4. Exécutez le script en utilisant uniquement son nom, scriptname .

Si vous n'avez pas accès à /usr/local/bin alors faites ce qui suit :

  1. Créez un dossier dans votre répertoire personnel et appelez-le bin .

  2. Faites ls -lA sur votre répertoire personnel, pour identifier le script de démarrage que votre shell utilise. Il devrait être soit .profile ou .bashrc .

  3. Une fois que vous avez identifié le script de démarrage, ajoutez la ligne suivante :

    PATH="$PATH:$HOME/bin"
  4. Une fois ajouté, sourcez votre script de démarrage ou déconnectez-vous et reconnectez-vous.

    Pour la source, mettez . suivi d'un espace et ensuite du nom de votre script de démarrage, par exemple . .profile ou . .bashrc

  5. Exécutez le script en utilisant uniquement son nom, scriptname .

0 votes

Je ne sais pas quel est le problème avec le système. J'ai créé un nouveau shell script nommé "hello" avec juste un "echo "hello" " dedans. J'ai changé ses permissions et essayé ./hello. Ça ne marche pas. Ça dit

0 votes

Quelles modifications avez-vous apportées à vos scripts de démarrage ?

0 votes

J'ai essayé de trouver les scripts de démarrage. Il est dit que je n'ai pas les permissions pour le faire.

23voto

ziesemer Points 15594

Assurez-vous simplement qu'il est exécutable, en utilisant chmod +x . Par défaut, le répertoire courant n'est pas dans votre PATH, vous devrez donc l'exécuter en tant que ./script.sh - ou le référencer par un chemin qualifié. Alternativement, si vous avez vraiment besoin de seulement script.sh vous devez l'ajouter à votre PATH. (Vous n'avez peut-être pas accès à la modification du chemin du système, mais vous pouvez presque certainement modifier le PATH de votre propre environnement actuel). Ceci suppose également que votre script commence par quelque chose comme #!/bin/sh .

Vous pouvez également utiliser un alias, qui n'est pas vraiment lié aux scripts shell mais simplement au shell, et qui est simple comme :

alias script.sh='sh script.sh'

Ce qui vous permettrait d'utiliser simplement script.sh (littéralement - cela ne fonctionnera pour aucune autre *.sh ) au lieu de sh script.sh .

0 votes

Merci pour votre réponse. J'ai essayé d'utiliser des alias plus tôt. Mais rien ne s'est produit. Je l'ai placé immédiatement après la ligne "#!/usr/local/bin/bash". A votre avis, qu'est-ce qui ne va pas ?

1 votes

Un alias ne peut pas être défini dans votre script - il doit être déclaré comme faisant partie de votre environnement actuel. Il suffit donc d'exécuter la commande alias à l'invite du shell, et l'alias sera alors disponible pour exécuter la commande.

18voto

Dans cet exemple, le fichier s'appellera myShell

Tout d'abord, nous devons créer ce fichier, nous pouvons commencer par taper ce qui suit :

sudo nano myShell

Remarquez que nous n'avons pas mis le .sh ? C'est parce que lorsque nous l'exécuterons à partir du terminal, nous devrons seulement taper myShell afin d'exécuter notre commande !

Maintenant, en nano, la ligne supérieure DOIT être #!/bin/bash vous pouvez alors laisser une nouvelle ligne avant de continuer.

Pour la démonstration, je vais ajouter une Hello World! réponse

Alors, je tape ce qui suit :

echo Hello World!

Après cela, mon exemple devrait ressembler à ceci :

#!/bin/bash
echo Hello World!

Maintenant, enregistrez le fichier et exécutez cette commande :

chmod +x myShell

Maintenant que nous avons rendu le fichier exécutable nous pouvons le déplacer vers /usr/bin/ en utilisant la commande suivante :

sudo cp myShell /usr/bin/

Félicitations ! Notre commande est maintenant terminée ! Dans le terminal, nous pouvons taper myShell et il devrait dire Hello World!

3 votes

Vous ne devez pas placer vos propres fichiers dans /usr/bin - de nombreux systèmes ont /usr/local/bin à cette fin et réserver /usr/bin strictement pour l'OS.

0 votes

Il n'y a pas besoin de sudo chmod votre propre fichier.

1 votes

Il n'est pas nécessaire de redémarrer la machine. Tout au plus, vous devez vous ressourcer

15voto

Uku Loskit Points 15705

Vous devez activer le bit exécutable pour le programme.

chmod +x script.sh

Vous pouvez alors utiliser ./script.sh

Vous pouvez ajouter le dossier au PATH de votre site Web. .bashrc (situé dans votre répertoire personnel). Ajoutez cette ligne à la fin du fichier :

export PATH=$PATH:/your/folder/here

0 votes

J'ai oublié de mentionner que j'ai déjà défini les bonnes permissions. J'ai utilisé la commande "chmod 755 script.sh"

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