无法运行 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

根据要求,以下是 echo 的结果$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从任何目录进行输入。

相关内容