使用SSH时转义引号

我试图为我的PHP应用程序构build一个简单的部署脚本。 我知道这个工作有几种工具(Capistrano,Phing等),但是对于我的简单部署例程来说,它们看起来像是很多工作。

我使用sshpass来避免一遍又一遍地input密码。 但上传我的压缩安装程序后,我需要ssh进入服务器并运行一些命令。 其中之一是sed。 所以,报价正在打破我的脚本。 这是这样的:

 sshpass -p foo ssh user @ host“
    cd / www / htdocs / foo / bar 
   回声“解除和删除安装程序”
    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上使用它们。

任何build议将不胜感激。 谢谢!

转义内部引号是正常的方式。 这不行吗?

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 " 

可以使用这里的文件吗?

 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