Php sh无法将内容写入文件
我正在使用PHP部署到服务器。该脚本使用Php sh无法将内容写入文件,php,bash,shell,unix,sh,Php,Bash,Shell,Unix,Sh,我正在使用PHP部署到服务器。该脚本使用sh-c \“…\”在远程服务器上执行命令。在我想将一些内容写入远程服务器上的文件之前,一切正常 为此,我尝试运行echo'foobar'>test.txt命令,该命令显然失败,因为命令周围有分隔符\“。有趣的是,如果我使用非转义分隔符执行命令,即”,我可以将文件写入内容。请参见下面的工作示例: $ sh -c "echo 'foobar' > test.txt" 但是,这不起作用: $ sh -c \"echo 'foobar' > tes
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“
文件,但没有任何内容
有什么想法吗?解决方案是将重定向包装(隐藏)到脚本中:
/my/path/print.sh
echo '$1' > $2
- 来自PHP的调用:
sh -c \" /my/path/print.sh 'foobar' test \"
/my/path/print.sh
echo '$1' > $2
- 来自PHP的调用:
sh -c \" /my/path/print.sh 'foobar' test \"
- 解决方案是将重定向包装(隐藏)到脚本中:
- 感谢大家的贡献。我们已经在mage项目中创建了该问题,并且该命令已被修改为不使用
\“
作为分隔符。这样就根本不需要逃避欺骗
谢谢大家的贡献。我们在mage项目中创建了这个问题,并且该命令被修改为不使用
\“
作为分隔符。这样就根本不需要逃避欺骗
转义引号会阻止它们充当引号。不要这样做。重定向是由原始shell完成的。文件是空的,因为
sh
出错,所以它没有打印任何内容。@显然,反斜杠在magephp
脚本中。通过ssh
传递嵌套引号是很棘手的。您需要处理ssh对参数的解析和远程shell的解析。事实上,反斜杠出现在magephp
脚本中,当我试图删除它们时,其他命令开始失败,因此我不想要求更改(也可能是BC中断)。转义引号会阻止它们充当引号。不要这样做。重定向是由原始shell完成的。该文件是空的,因为sh
出错,所以它没有打印任何内容。@显然,反斜杠在magephp
脚本中。通过ssh
传递嵌套引号很棘手。您实际上,反斜杠在magephp
脚本中,当我试图删除它们时,其他命令开始失败,所以我不想要求更改它(也可能是BC中断)。