2013-12-11 5 views
1

누구든지이 스크립트가 작동하지 않는 이유를 알고 있습니까?sed에서 변수 교체

파일 이름 : DB 나는 다음과 같은 오류를 얻을 수

#!/usr/local/bin/bash 
if [ -z "$1" ]; then 
    echo "Must specify source DB environment" 
    echo "One of s (for Staging), p (for Production)" 
    exit 
elif [ "$1" == "s" -o "$1" == "p" ]; then 
    if [ "$1" == "s" ]; then 
     echo "Connecting to Staging DB" 
     URL='staging\.example\.com' 
     PATH='/var/www/vhosts/staging\.example\.com' 
    else 
     echo "Connecting to Production DB" 
     URL='example\.com' 
     PATH='/var/www/vhosts/example\.com' 
    fi 
    ssh host "mysqldump -udbuser -pdbpass staging | gzip -9" | gzip -d | sed -e "s+$URL+example\.local+g" -e "s+$PATH+/Library/WebServer/Documents/example+g" | mysql -uroot -proot example_local 
fi 

:

./db: line 14: ssh: command not found 
./db: line 14: gzip: command not found 
./db: line 14: sed: command not found 
./db: line 14: mysql: command not found 

주 : ./db

  • 권한이 777
  • host이다는 .ssh/config에 저장됩니다. ssh host을 실행하여 원격 컴퓨터에 아무런 문제없이 접속할 수 있습니다.
  • 원격 및 로컬 모두에 대해 mysql 자격 증명이 정확합니다.
  • 마지막 ssh one-liner를 명령 줄에서 실행할 수 있습니다. 나는 그것이 sed에서 변수를 대체한다는 것을 확신합니다.

감사합니다.

+1

미안하지만, 나는 내 ... OSX에서 "집"사용자라고 부르는 것을 모른다. @anubhava는 스크립트에 사용중인 서버 경로로 시스템 $ PATH를 겹쳐 쓰는 것이 옳았습니다. –

답변

3

문제는 스크립트에서이 같은 라인이다 :

당신이 뭔가 다른 경로 env variable PATH 예약 설정을하고 그 등 sed, awk, grep, find 같은 핵심 유닉스 바이너리를 실행하는 데 필요한 PATH에서 /bin, /usr/bin, /sbin, /usr/sbin, /usr/local/bin 등을 제거
PATH='/var/www/vhosts/staging\.example\.com' 

이 이외의 다른 변수 이름을 사용하는 것이 좋습니다 PATH 같은 :

MYPATH='/var/www/vhosts/staging\.example\.com' 
+0

물론! 이런. 감사! 그래서 몇 분 더 받아들이지 않을거야. –

+0

당신을 가장 환영합니다. 네,이 이상한 법칙에 대해 알고 있습니다. – anubhava