简体   繁体   English

Escaping 引用时使用 SSH

[英]Escaping quotes when using SSH

I'm trying to build a simple deployment script for my PHP apps.我正在尝试为我的 PHP 应用程序构建一个简单的部署脚本。 I know there are several tools for this job (Capistrano, Phing, etc.) but they seem like a lot of work for my simple deployment routine.我知道有几种工具可以完成这项工作(Capistrano、Phing 等),但对于我的简单部署例程来说,它们似乎需要做很多工作。

I use sshpass to avoid typing my password over and over again.我使用sshpass来避免一遍又一遍地输入我的密码。 But after uploading my compressed installer, I need to ssh into the server and run some commands.但是在上传我的压缩安装程序后,我需要将 ssh 到服务器并运行一些命令。 One of which is sed.其中之一是 sed。 So, quotes are breaking my script.所以,引号打破了我的剧本。 It's something like this:是这样的:

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

"

As you can see, I use double-quotes to start my SSH statements, but I also need to use them on sed.如您所见,我使用双引号来开始我的 SSH 语句,但我还需要在 sed 上使用它们。

Any suggestions would be greatly appreciated.任何建议将不胜感激。 Thanks!谢谢!

Escaping the internal quote marks is the normal way. Escaping 内部引号是正常的方式。 Does this not work?这不起作用吗?

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

"

Can a here-document be used instead?:可以使用 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM