Nodejs shell 脚本在 Linux 中工作正常,但在 Windows 中不行。为什么它不会执行多个命令

2024-04-05

我发现我的 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));

In Linux

这将执行所有 3 个echo语句和输出正如我所期望的那样。

hello
Stack
Overflow

在 Windows 中

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

hello

为什么我会看到这种差异?我可以修复它,以便 Windows 脚本输出与 Linux 上的输出类似吗?


你应该使用:

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

代替

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nodejs shell 脚本在 Linux 中工作正常,但在 Windows 中不行。为什么它不会执行多个命令 的相关文章

  • 在 docker windows 上运行 linux 容器

    我在 Windows 10 机器上安装了 Docker for Windows 它要求我启用 HyperV 功能 一切都安装正确并且运行良好 虽然有一件事让我大吃一惊 我实际上能够在 docker windows 上运行 Linux 容器
  • 如何通过管道将输入和输出传送到交互式 shell?

    我正在尝试构建一个应用程序 使用户能够与命令行交互式 shell 例如 IRB 或 Python 进行交互 这意味着我需要将用户输入通过管道传输到 shell 并将 shell 的输出返回给用户 我希望这会像管道 STDIN STDOUT
  • 在大型文本文件中查找重复记录

    我在一台 Linux 机器 Redhat 上 并且有一个 11GB 的文本文件 文本文件中的每一行包含单个记录的数据 并且该行的前 n 个字符包含该记录的唯一标识符 该文件包含略多于 2700 万条记录 我需要验证文件中不存在具有相同唯一标
  • Shell 执行将窗口置于前面

    我正在使用此函数从我的 MSI 调用可执行文件 然而 可执行文件的窗口隐藏在我的 MSI 窗口后面 有什么办法可以把它带到前面吗 我尝试在调用之前最小化所有窗口ShellExecute但这仍然没有将可执行窗口带到前面 extern C UI
  • 使用 TypeScript 中的类型导入节点和 Express

    我正在尝试在 Visual Studio Code 中设置 TypeScript Express node 应用程序 如下所示微软指南 https code visualstudio com docs runtimes nodejs typ
  • “排序文件名 | uniq”不适用于大文件

    我可以从小文本文件中删除重复条目 但不能从大文本文件中删除重复条目 我有一个 4MB 的文件 文件的开头如下所示 aa aah aahed aahed aahing aahing aahs aahs aal aalii aalii aali
  • 带有引用数组的 Mongoose 模型架构:CastError:值“[object Object]”转换为 ObjectId 失败

    我用express js 和mongoosejs 构建了一个博客网站 一篇文章可能有一个或多个类别 当我创建新文章时 出现错误 CastError Cast to ObjectId failed for value object Objec
  • 使用 AWK 或 SED 以及以下标签以逗号分隔

    使用 AWK 或 SED 以及下面使用的标签以逗号分隔 BEGIN AccountID BEGIN CallerID BEGIN Billed Account Attributes 1111111 1111111 1111111 END B
  • Azure Nvidia 中的 apt-update 出现公钥错误

    我在 AZURE 上启动了 NVIDIA VM 并尝试使用进行更新sudo apt update但给出错误 Hit 2 http azure archive ubuntu com ubuntu focal InRelease Hit 3 h
  • Node.js npm mssql 函数返回未定义

    我使用 mssql 和 node js 连接到 sql server 数据库 我试图通过将连接代码包装在具有一个查询参数的函数中来减少代码 当我从 router get 函数中的 with 调用该函数时 它返回未定义 任何帮助将非常感激 f
  • 尝试在 Windows 上执行 package.json 中的脚本会引发 JScript 错误

    所以我正在尝试构建 javascriptair site 在 的里面package json有一个 npm 脚本指向 javascript 命令 package scripts 找到该存储库https github com kentcdod
  • 无法加载 php_curl

    我已经在WindowsXp上安装了php5 2 13 apache2 2 15 将C php添加到PATH ssystem变量中 我无法启用卷曲扩展 我配置了extension dir并删除了 在 php ini 中形成 php curl
  • 查找系统日志最大消息长度

    大多数 Unix 程序员都会习惯由syslog h 并且许多实现 例如 glibc 对发送给它的 syslog 消息的大小没有真正的限制 但通常对侦听的应用程序有限制 dev log 我想知道是否有人知道如何找到系统日志的最大消息大小 或者
  • 使用PM2时如何配置master进程

    我在 NodeJS 中遇到 PM2 问题 如果没有 PM2 我们总是有如下几行代码来配置主进程 if cluster isMaster master process configuration else worker process con
  • 使用 bitcoinjs-lib 发送比特币

    我正在关注 bitcoinjs 的教程https medium com orweinberger how to create a raw transaction using bitcoinjs lib 1347a502a3a wkf9g2l
  • Linux 缓冲区溢出环境变量

    我一直在审查不同类型的缓冲区溢出 并遇到了一个我不记得为什么会发生的问题 下面的代码是我尝试执行缓冲区溢出的程序 include
  • 将多个参数传递给 UNIX shell 脚本

    我有以下 bash shell 脚本 理想情况下我会用它来按名称杀死多个进程 bin bash kill ps A grep awk print 1 然而 虽然此脚本有效 但传递了一个参数 端镀铬 脚本名称为end 如果传递多个参数 则它不
  • Webpack 不包括 ProvidePlugins

    我正在开发一个小型试用 Web 应用程序 它使用 vue webpack 模板 https github com vuejs templates webpack https github com vuejs templates webpac
  • 无法在heroku上推送node.js应用程序

    我尝试在heroku 上推送我的node js 应用程序 但是 无法检测到此应用程序的默认语言 我什至尝试过heroku buildpacks set heroku nodejs 但还是无法推动 Counting objects 31 do
  • 是否可以允许jenkins访问只有root或某些特定程序可以访问的文件?

    我基本上想做的是允许 jenkins 访问我的 android sdk linux 文件夹和所有子目录 我的老板不想自己更改文件夹的权限 我应该在构建过程中这样做 我见过一些在构建过程中在执行 shell 中运行一些命令的示例 是否可以在该

随机推荐