web-dev-qa-db-fra.com

Comment exécuter un script bash?

J'ai donc écrit mon premier script bash:

#!/bin/bash
echo 'hello world!'
exit

Je sais qu'il a le bon emplacement pour s'exécuter et est exécutable:

$ which bash
/bin/bash
$ chmod +x myscript.sh

Maintenant, je veux l'exécuter à partir de la ligne de commande, mais j'obtiens une erreur:

$ myscript.sh
myscript.sh: command not found

Alors au lieu de cela, j'essaie et cela fonctionne:

$ bash myscript.sh
hello world!

Est-ce ainsi que je devrai toujours l'exécuter? J'ai l'impression d'avoir exécuté d'autres scripts sans avoir à le précéder de bash. Comment puis-je exécuter myscript.sh sans avoir à le faire précéder de bash?

Mise à jour: Voici une bonne explication de pourquoi et comment exécuter un script bash .

19
Andrew

Vous devez rendre le fichier exécutable. Vous pouvez le faire avec

chmod +x <filename>

où est le nom de votre script et vous devez ensuite l'ajouter avec ./ pour indiquer au shell d'exécuter un fichier dans le répertoire local, comme suit:

./script.sh

Vous pouvez uniquement exécuter les fichiers qui se trouvent dans votre PATH ou pour lesquels vous spécifiez un chemin. ./, le répertoire local, ne se trouve pas dans la PATH par défaut car quelqu'un peut l'utiliser à des fins néfastes. Imaginez un script appelé ls déposé dans un répertoire, vous allez à l'intérieur de ce répertoire, exécutez ls et ce script fait quelque chose de mal.

Pendant que vous y êtes, vous voudrez peut-être le rendre plus portable en exécutant Shell au lieu de bash en utilisant:

#!/bin/sh

ou en exécutant bash peu importe où il est installé tant qu'il est installé:

#!/usr/bin/env bash
28
pupeno

Il y a 3 façons d'exécuter le script bash. Par exemple, myscript.sh est le script que vous voulez exécuter.

Méthode 1

exécuter le script en tant que sous-processus, ce qui déclenchera des problèmes d’autorisation si ce n’est le propriétaire en écriture. Vous pouvez modifier les autorisations par chmod.

$ chmod + x myscript.sh

$ ./myscript.sh

Méthode 2

exécutez le script en tant qu'utilisateur actuel. si le script bash est bien écrit, il ne devrait pas y avoir d'erreur.

$ bash myscript.sh

Méthode 3

semblable à la méthode 2 mais un raccourci. notez que ceci est basé sur l'hypothèse que vous utilisez bash Shell dans la session en cours.

$. myscript.sh

j'espère que cela t'aides!:)

1
Jimmy M.G. Lim

En plus des conseils de Fernández, faites-le précéder d'un point, comme ceci:

./myscript.sh

Pour des raisons de sécurité, le répertoire en cours n'est jamais inclus dans le chemin d'exécution.

1
harrymc