
Estoy intentando ejecutar un script Bash simple llamado deploy-site.sh
(porhttp://klau.si/dev). Hice las ediciones necesarias para ejecutarlo localmente (cambio de WORKDIR, etc.). También seguí las instrucciones.aquí.
mkdir ~/bin
chmod 755 ~/bin
(Para almacenar el script en mi carpeta de inicio. Luego reinicié para que el sistema lo reconozca).
sudo chmod +x <path>
sudo chmod 755 <filename>
Sin embargo, cada vez que voy a la terminal para ejecutar el script Bash, aparece:
$ sudo deploy-site.sh <sitename>
sudo: deploy-site.sh: command not found
¿Como puedo solucionar este problema?
Aquí está el guión 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
Según lo solicitado, aquí están los resultados del eco.$PATH
/home/getoprodigy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Respuesta1
deploy-site.sh
no está en RUTA. Tienes que ejecutarlo como ./deploy-site.sh
si estuvieras en el mismo directorio o /path/deploy-site.sh
si no.
Respuesta2
Para ejecutarlo como deploy-site.sh
necesita, agréguelo a su$PATH
- puedes ver tu ruta actual con echo $PATH
:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$
↑ ruta estándar en Ubuntu 14.04 (probablemente)
Puedes hacer algunas cosas para "arreglarlo":
Ejecútelo desde el directorio actual.:
wget http://klau.si/sites/default/files/deploy-site.sh_.txt -O deploy-site.sh sudo ./deploy-site.sh
Agréguelo a un directorio existente RUTA: Como arriba, puede ver la ruta existente con
echo $PATH
y agregarla a uno de los directorios para que funcione; para los comandos personalizados que desea ejecutar en todo el sistema,/usr/local/bin
generalmente es suficiente.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
Agregue el directorio a la RUTA: La práctica normal para agregarlo permanentemente sería agregar esto a
~/.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
PERO esto solo funciona para su usuario actual (no cuando se ejecuta con
sudo
). Para que funcione consudo
(es decir, elroot
usuario), debería poder hacerlo de manera similar modificando (CUIDADOSAMENTE)/etc/environment
(o posiblemente,/root/.profile
etc.), pero como parece que este script solo necesita ejecutarse una vez, recomendaría uno de los métodos anteriores.
Respuesta3
Puedes ejecutarlo por
sudo bash deploy-site.sh
Respuesta4
Simplemente estás cambiando el permiso del archivo. Para ejecutar el script, puede especificar el nombre de ruta completo como respuesta de tiend.
Si desea usarlo como un comando desde cualquier directorio, cree un enlace /usr/bin
y podrá usarlo como comando.
$ cd /usr/bin
$ sudo ln /path/to/your/script linkname
ahora puedes escribir linkname
desde cualquier directorio.