Я пытаюсь запустить простой названный скрипт 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
deploy-site.sh
не находится в ПУТИ. Необходимо выполнить его как ./deploy-site.sh
, если Вы находитесь в том же каталоге или /path/deploy-site.sh
если не
Вы просто изменяете разрешение файла. Для запущения скрипта, можно указать полный путь как ответ tikend.
, Если Вы хотите использовать его в качестве команды из какого-либо каталога, создайте ссылку в /usr/bin
, и можно использовать ссылку в качестве команды.
$ cd /usr/bin
$ sudo ln /path/to/your/script linkname
теперь можно ввести linkname
из любого каталога.
Выполнять его как 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
и т.д.), но поскольку этот сценарий похож, он только должен быть выполнен однажды, я рекомендовал бы один из вышеупомянутых методов.