
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.sh
ist nicht in PATH. Sie müssen es ausführen, als ./deploy-site.sh
ob Sie sich im selben Verzeichnis befinden, oder /path/deploy-site.sh
wenn nicht
Antwort2
Um es auszuführen, deploy-site.sh
mü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 $PATH
und ihn zu einem der Verzeichnisse hinzufügen, damit es funktioniert – für benutzerdefinierte Befehle, die Sie systemweit ausführen möchten,/usr/local/bin
reicht 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 mitsudo
(also demroot
Benutzer) funktioniert, sollten Sie es auf ähnliche Weise durch (SORGFÄLTIGE) Änderung/etc/environment
(oder möglicherweise/root/.profile
usw.) 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/bin
und Sie können den Link als Befehl verwenden.
$ cd /usr/bin
$ sudo ln /path/to/your/script linkname
Jetzt können Sie linkname
aus jedem beliebigen Verzeichnis tippen.