Não é possível executar o script Bash

Não é possível executar o script Bash

Estou tentando executar um script Bash simples chamado deploy-site.sh(porhttp://klau.si/dev). Fiz as edições necessárias para executá-lo localmente (mudança de WORKDIR, etc). Eu também segui as instruçõesaqui.

mkdir ~/bin
chmod 755 ~/bin

(Para armazenar o script na minha pasta pessoal. Depois reiniciei, para que o sistema o reconheça.)

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

No entanto, sempre que vou ao terminal para executar o script Bash, recebo:

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

Como posso resolver este problema?


Aqui está o roteiro 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

Conforme solicitado, aqui estão os resultados do echo$PATH

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

Responder1

deploy-site.shnão está no PATH. Você tem que executá-lo como ./deploy-site.shse estivesse no mesmo diretório ou /path/deploy-site.shse não

Responder2

Para executá-lo, deploy-site.shvocê precisa adicioná-lo ao seu$PATH- você pode ver seu caminho atual com echo $PATH:

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

↑ caminho padrão no Ubuntu 14.04 (provavelmente)

Você pode fazer algumas coisas para 'consertar' isso:

  • Execute-o a partir do diretório atual:

    wget http://klau.si/sites/default/files/deploy-site.sh_.txt -O deploy-site.sh
    sudo ./deploy-site.sh
    
  • Adicione-o a um diretório existente PATH: Como acima, você pode visualizar o caminho existente com echo $PATHe adicioná-lo a um dos diretórios para fazê-lo funcionar - para comandos personalizados que você deseja executar em todo o sistema /usr/local/bingeralmente é 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
    
  • Adicione o diretório ao PATH: A prática normal para adicioná-lo permanentemente seria adicioná-lo 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
    

    MAS isso só funciona para o seu usuário atual (não quando executado com sudo). Para fazê-lo funcionar com sudo(ou seja, o rootusuário), você deve ser capaz de fazer de maneira semelhante modificando (CUIDADOSAMENTE) /etc/environment(ou possivelmente /root/.profileetc.), mas como esse script parece que só precisa ser executado uma vez, eu recomendaria um dos os métodos acima.

Responder3

Você pode executá-lo

sudo bash deploy-site.sh

Responder4

Você está apenas alterando a permissão do arquivo. Para executar o script você pode especificar o caminho completo como resposta do tikend.

Se você quiser usá-lo como um comando de qualquer diretório, crie um link /usr/bine poderá usar o link como comando.

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

agora você pode digitar linknameem qualquer diretório.

informação relacionada