Não é possível executar o script Bash

4

Estou tentando executar um script Bash simples chamado deploy-site.sh (pelo link ). Eu fiz as edições necessárias para executá-lo localmente (mudança de WORKDIR, etc). Eu também segui as instruções aqui .

mkdir ~/bin
chmod 755 ~/bin

(Para armazenar o script na minha pasta pessoal. Então eu 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 script 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 de echo $PATH

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

    
por yupthatguy 12.07.2015 / 09:53

4 respostas

11

deploy-site.sh não está no PATH. Você tem que executá-lo como ./deploy-site.sh se você estiver no mesmo diretório ou /path/deploy-site.sh se não estiver

    
por tikend 12.07.2015 / 10:02
8

Para executá-lo como deploy-site.sh , você 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 algumas coisas para "corrigir":

  • Execute 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
    
  • Adicioná-lo a um diretório existente PATH : Como acima, você pode visualizar o caminho existente com echo $PATH e adicioná-lo a um dos diretórios para fazê-lo funcionar - para comandos personalizados que você deseja rodar /usr/local/bin em todo o sistema normalmente é 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 também adiciona permanentemente para adicionar isso 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
    

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

por Wilf 12.07.2015 / 11:24
2

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 em /usr/bin e você pode usar o link como comando.

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

agora você pode digitar linkname em qualquer diretório.

    
por Pravin 12.07.2015 / 10:28
1

Você pode executá-lo por

sudo bash deploy-site.sh
    
por Mike 12.07.2015 / 10:27

Tags