Comment exécuter un script bash?

19

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 depuis 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 bash. Comment puis-je exécuter myscript.sh sans avoir à le précéder bash?

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

Andrew
la source

Réponses:

28

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

chmod +x <filename>

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

./script.sh

Vous ne pouvez exécuter que les fichiers qui se trouvent dans votre PATHou pour lesquels vous spécifiez un chemin. ./, le répertoire local, n’est pas dans le répertoire PATHpar défaut car quelqu'un peut l’utiliser à des fins néfastes. Imaginez un script appelé lsdéposé dans un répertoire, vous allez à l'intérieur de ce répertoire, vous l'exécutez lset ce script fait quelque chose de mal.

Pendant que vous y êtes, vous voudrez peut-être le rendre plus portable en exécutant shell à la place 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
pupeno
la source
Je l'ai déjà fait avec chmod + x myscript.sh. Est-ce que je l'ai mal fait?
Andrew
1
Vous manquez probablement ./ Je l'ai ajouté à la réponse.
pupeno
1

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.

harrymc
la source
1

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 le shell bash dans la session en cours.

$. myscript.sh

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

Jimmy MG Lim
la source