Quelle est la différence entre l'exécution d'un script shell sous ./script.sh et sh script.sh
J'ai un script qui ressemble à ce
#!/bin/bash
function something() {
echo "hello world!!"
}
something | tee logfile
J'ai mis de l'autorisation d'exécuter ce fichier et quand j'essaie d'exécuter le fichier comme ceci
$./script.sh
il fonctionne parfaitement bien, mais lorsque je l'exécute sur la ligne de commande comme ceci
$sh script.sh
Il génère une erreur. Pourquoi cela se passe et quels sont les domaines dans lesquels je peux résoudre ce problème.
source d'informationauteur Ritesh M Nayak
Vous devez vous connecter pour publier un commentaire.
En l'exécutant en tant
./script.sh
fera le noyau de lire la première ligne (le shebang), puis d'appeler bash pour interpréter le script. En l'exécutant en tantsh script.sh
utilise le shell de votre système par défautsh
(sur Ubuntu c'est le tableau de bord, qui est sh-compatible, mais ne prend pas en charge certaines des fonctions supplémentaires de Bash).Vous pouvez résoudre le problème en invoquant comme
bash script.sh
ou si c'est votre machine, vous pouvez modifier/bin/sh
à bash et pas ce qu'il est actuellement (généralement juste par lier celui-ci -rm /bin/sh && ln -s /bin/bash /bin/sh
). Ou vous pouvez simplement utiliser./script.sh
au lieu de cela si cela fonctionne déjà 😉Si votre shell est en effet dash et que vous souhaitez modifier le script pour être compatible, https://wiki.ubuntu.com/DashAsBinSh a un guide utile pour les différences. Dans votre échantillon, il semble que vous devriez juste à supprimer le mot-clé function.
si votre script est à votre répertoire de travail et vous délivrer des
./script.sh
le noyau va lire le shebang (première ligne) et d'exécuter le shell interprète qui est défini. vous pouvez également appeler votrescript.sh
en spécifiant le chemin d'accès de l'interprète par exemplePar ailleurs, vous pouvez également mettre votre arborescence comme ceci (si vous ne souhaitez pas spécifier le chemin complet)
sh script.sh les forces de l'script à exécuter dans le sh - shell.
tout simplement en commençant à partir de la ligne de commande utilise le shell-environemnt vous êtes dans.
Merci de poster le message d'erreur pour plus de réponses.
Aléatoire, bien que sur ce que l'erreur peut être:
chemin d'accès spécifié dans la première ligne de /bin/bash est mal-peut-être que bash n'est pas installé?