Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用SSH时转义引号_Linux_Bash_Ssh_Quoting - Fatal编程技术网

Linux 使用SSH时转义引号

Linux 使用SSH时转义引号,linux,bash,ssh,quoting,Linux,Bash,Ssh,Quoting,我正在尝试为我的PHP应用程序构建一个简单的部署脚本。我知道这项工作有几种工具(Capistrano、Phing等),但对于我的简单部署例程来说,它们似乎是很多工作 我习惯于避免反复输入密码。但是在上传我的压缩安装程序之后,我需要ssh到服务器并运行一些命令。其中一个是sed。所以,引号破坏了我的脚本。是这样的: sshpass -p foo ssh user@host " cd /www/htdocs/foo/bar echo 'Untar and remove installe

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

我习惯于避免反复输入密码。但是在上传我的压缩安装程序之后,我需要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 " sshpass-pfoosshuser@host " cd/www/htdocs/foo/bar 回显“卸载并删除安装程序” tar-zxf install.tar.gz sed“s/define(‘环境’、‘发展’)/定义(‘环境’、‘生产’);“index.php>tmp&&mv tmp index.php sed“s/define(‘环境’、‘发展’)/定义(‘环境’、‘生产’)/“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

"

是否可以使用here文档来代替

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
sshpass-pfoosshuser@hosttmp&&mv tmp admin/index.php
资料

此外,请使用
此选项,但会引发警告:由于stdin不是终端,因此不会分配伪终端。