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

요청한대로 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.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을 통해 비슷한 방식으로 만들 수 있어야 하지만 이 스크립트는 한 번만 실행하면 되는 것처럼 보이므로 다음 중 하나를 권장합니다. 위의 방법./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이제 어떤 디렉토리에서든 입력할 수 있습니다 .

관련 정보