2013-12-11 3 views
1

Кто-нибудь знает, почему этот скрипт не сработает?Замена переменных в sed

файла: дб

#!/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 ​​однострочный в командной строке. Я почти уверен, что это переменная замена в sed, которая все испортила.

Спасибо!

+1

Извините, я должен был добавить, что я бегу как мой ... Я не знаю, как вы это называете ... «Домашний» пользователь на OSX. @anubhava правильно, что я переписывал свою систему $ PATH с использованием пути сервера для скрипта. –

ответ

3

Проблема линий, как это в вашем скрипте:

PATH='/var/www/vhosts/staging\.example\.com' 

Где вы настраиваете зарезервирован путь env variable PATH к чему-то еще, и это удаляет /bin, /usr/bin, /sbin, /usr/sbin, /usr/local/bin и т.д. от PATH, который необходим для запуска ядра Unix двоичные файлы как sed, awk, grep, find и т.д.

лучше использовать другое имя переменной, кроме PATH как:

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

Конечно! Дух. Благодаря! Я не позволю себе принять еще несколько минут. –

+0

Добро пожаловать. Да, я знаю об этом странном правиле SO. – anubhava

Смежные вопросы