Невозможно запустить скрипт Bash

Невозможно запустить скрипт Bash

Я пытаюсь запустить простой скрипт Bash, называемый deploy-site.sh(byhttp://klau.si/dev). Я сделал необходимые правки для локального запуска (изменение WORKDIR и т. д.). Я также следовал инструкциямздесь.

mkdir ~/bin
chmod 755 ~/bin

(Чтобы сохранить скрипт в своей домашней папке. Затем я перезагрузился, чтобы система его распознала.)

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

Однако всякий раз, когда я захожу в терминал, чтобы выполнить скрипт Bash, я получаю:

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

Как можно решить эту проблему?


Вот оригинальный сценарий:

#!/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

По вашей просьбе вот результаты эхо$PATH

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

решение1

deploy-site.shне находится в PATH. Вы должны запустить его так, как ./deploy-site.shбудто вы находитесь в том же каталоге, или /path/deploy-site.shесли нет

решение2

Чтобы запустить его, deploy-site.shвам нужно добавить его в свой$PATH- вы можете просмотреть свой текущий путь с помощью echo $PATH:

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

↑ стандартный путь в Ubuntu 14.04 (вероятно)

Вы можете сделать несколько вещей, чтобы это «исправить»:

  • Запустите его из текущего каталога.:

    wget http://klau.si/sites/default/files/deploy-site.sh_.txt -O deploy-site.sh
    sudo ./deploy-site.sh
    
  • Добавьте его в существующий каталог PATH: Как и выше, вы можете просмотреть существующий путь с помощью echo $PATHи добавить его в один из каталогов, чтобы он заработал — для пользовательских команд, которые вы хотите запустить в масштабах всей системы, /usr/local/binобычно этого достаточно.

    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
    
  • Добавьте каталог в PATH: Обычная практика — добавить это на постоянной основе ~/.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
    

    НО это работает только для вашего текущего пользователя (не при запуске с sudo). Чтобы это работало с sudo(т. е. rootпользователем), вы должны быть в состоянии сделать это похожим образом, (ОСТОРОЖНО) изменив /etc/environment(или, возможно, /root/.profileи т. д.), но поскольку этот скрипт выглядит так, как будто его нужно запустить только один раз, я бы рекомендовал один из вышеприведенных методов.

решение3

Вы можете запустить его с помощью

sudo bash deploy-site.sh

решение4

Вы просто меняете разрешение файла. Для запуска скрипта вы можете указать полный путь как ответ tikend.

Если вы хотите использовать его как команду из любого каталога, создайте ссылку /usr/binи можете использовать ссылку как команду.

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

теперь вы можете печатать linknameиз любого каталога.

Связанный контент