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

Я пытаюсь запустить простой названный скрипт Bash deploy-site.sh (http://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

5
задан 13 April 2017 в 05:23

4 ответа

deploy-site.sh не находится в ПУТИ. Необходимо выполнить его как ./deploy-site.sh, если Вы находитесь в том же каталоге или /path/deploy-site.sh если не

12
ответ дан 23 November 2019 в 08:38

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

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

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

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

2
ответ дан 23 November 2019 в 08:38

Можно выполнить его

sudo bash deploy-site.sh
1
ответ дан 23 November 2019 в 08:38

Выполнять его как 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
    
  • Добавьте его к существующему пути к каталогу: Как выше Вас может просмотреть существующий путь с 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
    
  • Добавьте каталог к ПУТИ: Нормальная практика также добавляет, что постоянно должна была бы добавить это к ~/.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 пользователь), ou должен смочь сделать похожим способом, (ТЩАТЕЛЬНО) изменив /etc/environment (или возможно /root/.profile и т.д.), но поскольку этот сценарий похож, он только должен быть выполнен однажды, я рекомендовал бы один из вышеупомянутых методов.

8
ответ дан 23 November 2019 в 08:38

Другие вопросы по тегам:

Похожие вопросы: