我正在尝试运行一个名为deploy-site.sh(通过http://klau.si/dev)的简单 Bash 脚本。我进行了必要的编辑以在本地运行它(更改 WORKDIR 等)。我也按照此处的说明进行操作。
mkdir ~/bin
chmod 755 ~/bin
Run Code Online (Sandbox Code Playgroud)
(将脚本存储在我的主文件夹中。然后我重新启动,以便系统识别它。)
sudo chmod +x <path>
sudo chmod 755 <filename>
Run Code Online (Sandbox Code Playgroud)
但是,每当我去终端执行 Bash 脚本时,我都会得到:
$ sudo deploy-site.sh <sitename>
sudo: deploy-site.sh: command not found
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
这是原始脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
根据要求,这是 echo 的结果 $PATH
/home/getoprodigy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
要根据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
$
Run Code Online (Sandbox Code Playgroud)
? Ubuntu 14.04 上的标准路径(可能)
你可以做一些事情来“修复”它:
从当前目录运行它:
wget http://klau.si/sites/default/files/deploy-site.sh_.txt -O deploy-site.sh
sudo ./deploy-site.sh
Run Code Online (Sandbox Code Playgroud)将其添加到现有目录 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
Run Code Online (Sandbox Code Playgroud)将目录添加到 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
Run Code Online (Sandbox Code Playgroud)
但这只适用于您当前的用户(不适用于运行时sudo)。为了让它与sudo(即root用户)一起工作,你应该能够通过(小心地)修改/etc/environment(或可能/root/.profile等)以类似的方式制作,但由于这个脚本看起来只需要运行一次,我会推荐其中之一以上方法。