Bash スクリプトを実行できません

Bash スクリプトを実行できません

deploy-site.sh私は(by)と呼ばれる単純なBashスクリプトを実行しようとしています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

答え1

deploy-site.shPATHにありません。./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同様の方法で作成できるはずですが、このスクリプトは 1 回実行するだけで済むように見えるため、上記の方法のいずれかをお勧めします。/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これでどのディレクトリからでも入力できるようになりました。

関連情報