Sur notre système scolaire, nous pouvons exécuter des fichiers de script sans taper bash
ou csh
ou quoi que ce soit sans indiquer de quel type de script il s'agit. Sur Ubuntu, cependant, je suis obligé de taper bash script.bash
par exemple. Est-ce toujours nécessaire dans Ubuntu, ou est-ce un paramètre que je peux changer?
11
.sh
de scripts bash. En règle générale, les extensions de fichier ne sont pas utilisées pour les scripts exécutables dans le monde UNIX.Réponses:
Assurez-vous de démarrer le script avec
./script
ou chemin complet ou autre. Justescript
peut ne pas fonctionner (cela fonctionne si le répertoire est$PATH
, comme/usr/bin
), étant donné que sur les systèmes UNIX ce n'est pas une habitude d'avoir le répertoire courant dans votre chemin (pour des raisons de sécurité, et il est bon!)Assurez-vous que le script est exécutable, par exemple: le
chmod +x script
rendra exécutable.Assurez-vous que vous disposez
#!/bin/bash
de la première ligne de votre script. Assurez-vous également qu'il n'est pas édité avec une sorte d'éditeur Windows, car ceux-ci utilisent souvent le "type DOS" de eol (fin de ligne) qui diffère de celui UNIX (si la liste de contrôle ci-dessus est OK, mais vous avez "mauvaise" interprète: aucun fichier ou répertoire "ou alors, même si c'est / bin / bash, c'est souvent la raison, car non imprimable - donc vous ne le voyez généralement pas - \ r sera traité comme la partie du chemin de l'interprète)D'autres ont déjà mentionné: il est important d'avoir
/bin/bash
si vous utilisez des fonctionnalités bash, également un/bin/sh
lien symbolique vers/bin/bash
, mais de nos jours (pour autant que je le remarque), il est lié à un lien symboliquedash
qui ne fournira pas de compatibilité bash, uniquement le POSIXsh
. C'est assez important, même les logiciels assez chers de notre entreprise ont ce problème: les scripts contiennent#!/bin/sh
comme première ligne mais cela dépend aussi des fonctionnalités bash.la source
#!/usr/bin/env bash
qui est légèrement plus portable.Assurez-vous que la première ligne du fichier indique:
Si le shebang est
#!/bin/sh
, vous ne devez pas utiliser de fonctionnalités spécifiques à bash, uniquement des fonctionnalités POSIX. Même s'il/bin/sh
s'agit d'un lien symbolique versbash
, bash s'exécutera en mode de compatibilité POSIX lorsqu'il sera exécuté en tant que sh, désactivant certaines (mais pas toutes) les fonctionnalités de bash.Vous devrez également vous assurer que le script est exécutable, bien sûr.
la source
Une alternative, fortement déconseillée , s'ajoute
.
àPATH
.ou
Le problème avec cette approche est que dans le premier cas, toute commande système peut être remplacée par des exécutables du répertoire en cours, et dans le dernier cas, des commandes inconnues peuvent toujours être remplacées.
Considérer ce qui suit:
Fichier: ls
Vous ne le remarquerez probablement pas avant qu'il ne soit trop tard.
la source
echo
par exemple, celle de votre répertoire sera utilisée simplement parce que ce répertoire est défini enPATH
variable avant le/bin
. Shell recherche simplement les commandes dans des répertoires particuliers en fonction de leur ordrePATH
et ne remplace / détruit rien. Mais oui, cela a des implications