Экранирование кавычек при использовании SSH

Я пытаюсь создать простой скрипт развертывания для моих PHP-приложений. Я знаю, что для этой работы есть несколько инструментов (Capistrano,Phing и т. д.) но они кажутся большой работой для моей простой процедуры развертывания.

Я использую sshpass чтобы избежать ввода пароля снова и снова. Но после загрузки моего сжатого установщика мне нужно ssh на сервер и выполнить некоторые команды. Один из которых-сед. Итак, цитаты нарушают мой сценарий. Это что-то вроде это:

sshpass -p foo ssh user@host "
   cd /www/htdocs/foo/bar 
   echo 'Untar and remove installer'
   tar -zxf install.tar.gz

   sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');" index.php > tmp && mv tmp index.php
   sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/" admin/index.php > tmp && mv tmp admin/index.php

"

Как вы можете видеть, я использую двойные кавычки для запуска моих операторов SSH, но мне также нужно использовать их на sed.

любые предложения были бы весьма признательны. Спасибо!

2 ответов


экранирование внутренних кавычек является нормальным способом. Разве это не работает?

sshpass -p foo ssh user@host "
cd /www/htdocs/foo/bar
echo 'Untar and remove installer'
tar -zxf install.tar.gz

sed \"s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');\" index.php > tmp && mv tmp index.php
sed \"s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/\" admin/index.php > tmp && mv tmp admin/index.php

"

можно ли вместо этого использовать here-документ?:

sshpass -p foo ssh user@host <<DATA
   cd /www/htdocs/foo/bar 
   echo 'Untar and remove installer'
   tar -zxf install.tar.gz

   sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');" index.php > tmp && mv tmp index.php
   sed "s/define('ENVIRONMENT', 'development');/define('ENVIRONMENT', 'production');/" admin/index.php > tmp && mv tmp admin/index.php
DATA