8

我正在尝试为我的 PHP 应用程序构建一个简单的部署脚本。我知道有几种工具可以完成这项工作(Capistrano、Phing 等),但对于我的简单部署例程来说,它们似乎需要做很多工作。

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

sshpass -p foo ssh user@host "
   cd /www/htdocs/foo/bar
   echo '解压缩并删除安装程序'
   tar -zxf install.tar.gz

   sed "s/define('ENVIRONMENT', '开发');/define('ENVIRONMENT', '生产');" index.php > tmp && mv tmp index.php
   sed "s/define('ENVIRONMENT', '开发');/define('ENVIRONMENT', '生产');/" admin/index.php > tmp && mv tmp admin/index.php

"

如您所见,我使用双引号来开始我的 SSH 语句,但我还需要在 sed 上使用它们。

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

4

2 回答 2

8

转义内部引号是正常的方法。这不起作用吗?

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

"
于 2011-07-08T08:22:11.863 回答
2

可以使用 here-document 代替吗?:

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
于 2011-07-08T08:26:54.090 回答