javascript - 带Child_Process的NodeJS如何退出我的命令

  显示原文与译文双语对照的内容
0 0

我目前正在使用nodejs和 child_process MODULE 。 我们正在试验一些奇怪的comportements 。

基本上,我们只是想使用xcopy命令复制一个文件。

例如我们执行以下操作:


xcopy"C:/my/path/myfile.test""C:/my/path/mynewfile.test*" => Does not work. Windows needs backslash
xcopy"C:mypathmyfile.test""C:/my/path/mynewfile.test*" => Does not work. We need to escape backslash
xcopy"C:mypathmyfile.test""C:/my/path/mynewfile.test*" => Works...

所以我有一些问题。

  • 为什么xcopy的源参数需要反斜线,而目标参数则使用斜线?

  • 我正在使用子进程 MODULE的繁殖函数。 看来这并不意味着。 我试着看nodejs的代码但是。 这不容易繁殖函数是否会转义命令? !

  • 如果我们需要自己逃避命令,那么我们也希望在UNIX上执行我们的命令。 因此,我假设转义方法不是相同的。 我也不愿意做一个

    
     if(window)
     escapeshellargWindow(arg)
     else if(unix)
     escapeshellargLinux(arg)
    
    

还有谁有这样的问题?

时间: 原作者:

0 0

虽然不熟悉 Windows,但是我猜想第一个参数中的正斜杠可能被解析为 xcopy 命令的选项。 任何下列参数都不会像这样处理,因此将工作。

关于转义,这个问题并不是那么多 spawn,而是在文本Javascript字符串中使用 转义的一般方法。 所以如果你使用这个:


spawn('xcopy', [ 'C:mypathmyfile.test',.. . ])

以下是 spawn 将接收( 作为 arguments )的内容:


{ '0': 'xcopy', '1': [ 'C:mypathmyfile.test' ] }

同样的:


> console.log( 'C:mypathmyfile.test' )
C:mypathmyfile.test

因此,如果要向JS字符串中添加反斜杠,则需要将它的转义:


> console.log( 'C:mypathmyfile.test' )
C:mypathmyfile.test

但是,这只对代码( 在你的JS中硬编码) 中的字符串 。 对于计算或者以( 就像 process.argv 里的命令行 ) 形式传递的字符串,不需要额外的转义。

因为 spawn 不知道你传递给它的内容,所以它不会自行转义。

原作者:
...