【发布时间】:2017-06-24 12:53:16
【问题描述】:
我正在使用magephp 将 PHP 部署到服务器。该脚本使用sh -c \" ... \" 在远程服务器上执行命令。一切正常,直到我想将一些内容写入远程服务器上的文件。
为此,我尝试运行echo 'foobar' > test.txt 命令,但由于分隔符\" 环绕该命令,该命令显然失败了。有趣的是,如果我使用非转义分隔符(即")执行命令,我可以将文件写入内容。请参阅下面的工作示例:
$ sh -c "echo 'foobar' > test.txt"
但这不起作用:
$ sh -c \"echo 'foobar' > test.txt\"
foobar: -c: line 0: unexpected EOF while looking for matching `"'
foobar: -c: line 1: syntax error: unexpected end of file
奇怪的是,在这个命令失败后,我创建了 test.txt" 文件,但没有任何内容。
有什么想法吗?
【问题讨论】:
-
转义引号可防止它们充当引号。不要那样做。
-
重定向是由原来的shell完成的。该文件是空的,因为
sh出错了,所以它没有打印任何东西。 -
@Inian 显然反斜杠在
magephp脚本中。 -
通过
ssh传递嵌套引号很棘手。您需要同时处理 ssh 对参数的解析和远程 shell 的解析。 -
确实,反斜杠在
magephp脚本中,当我尝试删除它们时,其他命令开始失败,所以我不想要求更改它(也将是 BC 中断)。