No se puede ejecutar el script Bash

No se puede ejecutar el script Bash

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.shno está en RUTA. Tienes que ejecutarlo como ./deploy-site.shsi estuvieras en el mismo directorio o /path/deploy-site.shsi no.

Respuesta2

Para ejecutarlo como deploy-site.shnecesita, 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 $PATHy agregarla a uno de los directorios para que funcione; para los comandos personalizados que desea ejecutar en todo el sistema, /usr/local/bingeneralmente 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_profileetc.:

    #.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 con sudo(es decir, el rootusuario), debería poder hacerlo de manera similar modificando (CUIDADOSAMENTE) /etc/environment(o posiblemente, /root/.profileetc.), 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/biny podrá usarlo como comando.

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

ahora puedes escribir linknamedesde cualquier directorio.

información relacionada