linux - 使用 SSH 时转义引号

标签 linux bash ssh 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 上使用它们。

如有任何建议,我们将不胜感激。谢谢!

最佳答案

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

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

"

关于linux - 使用 SSH 时转义引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6621777/

相关文章:

java - 如何为 GNU/Linux 设置正确的字符编码

linux - 如何根据文件名模式删除文件?

deployment - Fabric 需要很长时间才能使用 ssh

ssh - 为什么在 ssh-keygen 中使用 `-t rsa -b 4096`?

linux - 防止滥用 JMeter 等负载和压力测试软件

linux - init 和 bash 终端进程之间的关系

linux - 在 unix 中更改 csv 文件分隔符

linux:/dev/null/: 是一个目录

bash - 为什么 sudo pm-suspend 在 i3 平铺窗口管理器中不起作用?

ssh - Amazon EC2 AMI 根 Authorized_keys