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 .
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
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!:)
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.