
Я пытаюсь запустить простой скрипт 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
из любого каталога.