無法運行 Bash 腳本

無法運行 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

根據要求,這是 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不在路徑中。您必須運行它,就好像./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從任何目錄鍵入。

相關內容