Php sh无法将内容写入文件

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

我正在使用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“
文件,但没有任何内容


有什么想法吗?

解决方案是将重定向包装(隐藏)到脚本中:

  • /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中断)。