使用SSH时转义引号

fed*_*sas 8 linux ssh bash quoting

我正在尝试为我的PHP应用程序构建一个简单的部署脚本.我知道这项工作有多种工具(Capistrano,Phing等),但对于我的简单部署例程,它们看起来很多.

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

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上使用它们.

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

Fli*_*mzy 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

"
Run Code Online (Sandbox Code Playgroud)