一尘不染

使用SSH时转义引号

linux

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

我使用sshpass避免一遍又一遍地输入密码。但是,在上传压缩的安装程序之后,我需要将ssh插入服务器并运行一些命令。sed之一。因此,引号破坏了我的脚本。就像这样:

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

   sed“ s / define('环境','开发'); / define('环境','生产');” 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上使用它们。

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


阅读 757

收藏
2020-06-07

共1个答案

一尘不染

逃脱内部引号是正常的方法。这行不通吗?

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

"
2020-06-07