Bash-Skript kann nicht ausgeführt werden

Bash-Skript kann nicht ausgeführt werden

Ich versuche, ein einfaches Bash-Skript namens deploy-site.sh(vonhttp://klau.si/dev). Ich habe die notwendigen Änderungen vorgenommen, um es lokal auszuführen (Änderung von WORKDIR usw.). Ich habe auch die Anweisungen befolgtHier.

mkdir ~/bin
chmod 755 ~/bin

(Um das Skript in meinem Home-Ordner zu speichern. Dann habe ich einen Neustart durchgeführt, damit das System es erkennt.)

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

Wenn ich jedoch zum Terminal gehe, um das Bash-Skript auszuführen, erhalte ich Folgendes:

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

Wie kann ich dieses Problem beheben?


Hier ist das Originalskript:

#!/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

Wie gewünscht, hier die Ergebnisse von echo$PATH

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

Antwort1

deploy-site.shist nicht in PATH. Sie müssen es ausführen, als ./deploy-site.shob Sie sich im selben Verzeichnis befinden, oder /path/deploy-site.shwenn nicht

Antwort2

Um es auszuführen, deploy-site.shmüssen Sie es zu Ihrem hinzufügen$PATH- Sie können Ihren aktuellen Pfad anzeigen mit echo $PATH:

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

↑ Standardpfad unter Ubuntu 14.04 (wahrscheinlich)

Sie können das Problem auf verschiedene Weise „beheben“:

  • Führen Sie es aus dem aktuellen Verzeichnis aus:

    wget http://klau.si/sites/default/files/deploy-site.sh_.txt -O deploy-site.sh
    sudo ./deploy-site.sh
    
  • Fügen Sie es einem vorhandenen Verzeichnispfad hinzu: Wie oben können Sie den vorhandenen Pfad mit anzeigen echo $PATHund ihn zu einem der Verzeichnisse hinzufügen, damit es funktioniert – für benutzerdefinierte Befehle, die Sie systemweit ausführen möchten, /usr/local/binreicht dies normalerweise aus.

    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
    
  • Fügen Sie das Verzeichnis zum PATH hinzu: Normalerweise wird dies zum dauerhaften Hinzufügen usw. hinzugefügt ~/.profile:~/.bash_profile

    #.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
    

    ABER dies funktioniert nur für Ihren aktuellen Benutzer (nicht, wenn es mit ausgeführt wird sudo). Damit es mit sudo(also dem rootBenutzer) funktioniert, sollten Sie es auf ähnliche Weise durch (SORGFÄLTIGE) Änderung /etc/environment(oder möglicherweise /root/.profileusw.) ausführen können, aber da dieses Skript anscheinend nur einmal ausgeführt werden muss, würde ich eine der oben genannten Methoden empfehlen.

Antwort3

Sie können es ausführen, indem Sie

sudo bash deploy-site.sh

Antwort4

Sie ändern lediglich die Dateiberechtigung. Um das Skript auszuführen, können Sie den vollständigen Pfadnamen als Antwort von tikend angeben.

Wenn Sie es als Befehl aus einem beliebigen Verzeichnis verwenden möchten, erstellen Sie einen Link darin /usr/binund Sie können den Link als Befehl verwenden.

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

Jetzt können Sie linknameaus jedem beliebigen Verzeichnis tippen.

verwandte Informationen