5 votes

Impossible d'exécuter le script de Bash

J'essaie de lancer un simple script Bash appelé deploy-site.sh (par http://klau.si/dev ). J'ai fait les modifications nécessaires pour l'exécuter localement (changement de WORKDIR, etc.). J'ai également suivi les instructions aquí .

mkdir ~/bin
chmod 755 ~/bin

(Pour stocker le script dans mon dossier personnel. Puis j'ai redémarré, pour que le système le reconnaisse).

sudo chmod +x <path>
sudo chmod 755 <filename>

Cependant, chaque fois que je vais dans le terminal pour exécuter le script de Bash, j'obtiens :

$ sudo deploy-site.sh <sitename>
sudo: deploy-site.sh: command not found

Comment puis-je résoudre ce problème ?


Voici le script original :

#!/bin/bash

if [[ $# -lt 1 || $1 == "--help" || $1 == "-h" ]]
then
  echo "Usage:"
  echo "  sudo `basename $0` SITENAME"
  echo "Examples:"
  echo "  sudo `basename $0` drupal-8"
  exit
fi

WORKDIR="/home/klausi/workspace"
APACHEDIR="/etc/apache2/sites-available"
HOSTSFILE="/etc/hosts"

echo "<VirtualHost *:80>
    ServerAlias $1.localhost
    DocumentRoot $WORKDIR/$1
    <Directory \"$WORKDIR/$1\">
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>" > $APACHEDIR/$1.conf
a2ensite $1
service apache2 restart
grep -q "127.0.0.1  $1.localhost" $HOSTSFILE
if [ $? -ne 0 ]; then
  echo "127.0.0.1  $1.localhost" >> $HOSTSFILE
fi

Comme demandé, voici les résultats de l'écho $PATH

/home/getoprodigy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

14voto

Graham Klyne Points 141

deploy-site.sh n'est pas dans PATH. Vous devez l'exécuter en tant que ./deploy-site.sh si vous êtes dans le même répertoire ou /path/deploy-site.sh sinon

8voto

Wilf Points 28034

Pour l'exécuter en tant que deploy-site.sh vous devez l'ajouter à votre $PATH - vous pouvez visualiser votre chemin actuel avec echo $PATH :

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ 

chemin standard sur Ubuntu 14.04 (probablement)

Vous pouvez faire plusieurs choses pour le "réparer" :

  • L'exécuter à partir du répertoire courant :

    wget http://klau.si/sites/default/files/deploy-site.sh_.txt -O deploy-site.sh
    sudo ./deploy-site.sh
  • Ajoutez-le à un répertoire existant PATH : Comme ci-dessus, vous pouvez visualiser le chemin existant avec echo $PATH et ajoutez-le à l'un des répertoires pour le faire fonctionner - pour les commandes personnalisées que vous voulez exécuter à l'échelle du système /usr/local/bin suffit généralement.

    wget http://klau.si/sites/default/files/deploy-site.sh_.txt -O deploy-site
    sudo cp deploy-site /usr/local/bin/
    sudo chmod +x /usr/local/bin/
    sudo deploy-site
  • Ajouter le répertoire au PATH : La pratique normale pour l'ajouter de façon permanente serait d'ajouter ceci à ~/.profile , ~/.bash_profile etc :

    #.bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ] ; then
    . ~/.bashrc
    fi
    
    #User specific environment and startup programs
    PATH=$PATH:$HOME/.local/bin:$HOME/bin
    
    export PATH

    MAIS cela ne fonctionne que pour votre utilisateur actuel (pas lorsqu'il est exécuté avec sudo ). Pour le faire fonctionner avec sudo (c'est-à-dire le root ) que vous devriez être en mesure de faire de manière similaire en modifiant (AVEC PRÉCAUTION) /etc/environment (ou éventuellement /root/.profile etc), mais comme ce script semble ne devoir être exécuté qu'une seule fois, je recommanderais l'une des méthodes ci-dessus.

2voto

Pravin Points 165

Vous ne faites que changer la permission du fichier. Pour exécuter le script vous pouvez spécifier le chemin complet comme la réponse de tikend.

Si vous voulez l'utiliser comme une commande à partir de n'importe quel répertoire, créez un lien dans le fichier /usr/bin et vous pouvez utiliser le lien comme commande.

$ cd /usr/bin
$ sudo ln /path/to/your/script linkname

vous pouvez maintenant taper linkname à partir de n'importe quel répertoire.

1voto

Mike Points 5131

Vous pouvez l'exécuter en

sudo bash deploy-site.sh

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X