【问题标题】:Nodejs shell script works fine in linux but not in Windows. Why won't it execute more than one commandNodejs shell 脚本在 linux 中运行良好,但在 Windows 中却不行。为什么它不会执行多个命令
【发布时间】:2017-05-24 23:25:38
【问题描述】:

我发现我的 node.js shell 脚本在 Windows 和 Linux 中的工作方式有所不同。我有一串使用 child_process 库同步执行的命令。

var cmd = `echo 'hello'
echo 'Stack'
echo 'Overflow'`

var exec = require('child_process').execSync;
var options = {
  encoding: 'utf8'
};
console.log(exec(cmd, options));

在 Linux 中

这会按照我的预期执行所有 3 个 echo 语句和输出。

hello
Stack
Overflow

在 Windows 中

而在 Windows 中,我不知道它是否执行 3 次。我所知道的是只输出第一个echo 命令。

hello

为什么我会看到这种差异,我能否修复它,以使 Windows 脚本的输出方式与它在 Linux 上的输出方式相似?

【问题讨论】:

  • 只是出于好奇,将cmd 更改为var cmd = "echo 'hello' && echo 'Stack' && echo 'Overflow'" 会发生什么?
  • 不确定。当我回到我的电脑(在我的手机上)时,我可以尝试一下
  • 那太好了!我会尝试一下,但我目前没有易于访问的 Windows 计算机。
  • 我测试了它并且它有效!如果您对我为什么会很乐意授予最佳答案有很好的解释!
  • 我不确定它为什么会起作用,但我可以猜测一下。如果您不介意,您的代码在每行后面加上\n 的输出是什么?

标签: node.js linux windows shell


【解决方案1】:

你应该使用:

var cmd = "echo 'hello' && echo 'Stack' && echo 'Overflow'"

而不是

var cmd = `echo 'hello'
echo 'Stack'
echo 'Overflow'`

我不太确定为什么会这样,但我有一个猜测。

&& 仅当前一个命令的错误级别为 0 时才执行此命令。

这意味着它将每一行视为单独的命令。 而以您的方式,它(可能)将每一行视为相同的命令,并且无论出于何种原因,这都会导致它仅输出第一行。

【讨论】:

    【解决方案2】:

    难道脚本是在 linux 中创建的,因此它有 LF (LineFold) \n 行尾?另一方面,windows 需要 CRLF (CarrageReturn LineFold) \r\n。

    当您在选择的编辑器中将行尾更改为 windows 样式的行尾时,我敢打赌它会起作用。

    【讨论】:

    • 我觉得这是最合乎逻辑的解释,但我已将代码切换为 LF 和 CLRF,但均无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多