暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Terminal 系列 - 同时运行多个命令

浮之静 2022-11-11
368


在开发中常需要同时执行多个命令,concurrently
的出现就是为了满足此类场景。

背景

作者喜欢使用 npm[1] 实现任务自动化,但同时运行多个命令的常用方法是 npm run watch-js & npm run watch-css
。使用 &
很好,却很难跟踪不同的输出。此外,如果一个进程失败,其他进程仍会继续运行,你也不会注意到其中的差异。另一种选择是在单独的终端中运行所有命令,但每个命令的运行都必须新开一个终端窗口更令人厌烦。

安装

因其使用 JS 编写,所以运行需要依赖 Node.js[2] 环境。

# 全局安装
npm i -g concurrently

# 项目中安装(-D: 开发依赖)
npm i -D concurrently

复制

使用

命令使用帮助,以下列举了部分使用参数,查看文档了解更多 concurrently[3]

concurrently -h

复制
concurrently 'echo "hello\n"' 'echo "world\n"' "git status"

复制

--raw (-r)

直接输出子进程:stdout + stderr:

concurrently --raw 'echo "hello\n"' 'echo "world\n"' "git status"

复制

--prefix (-p)

自定义前缀,日期格式请参考 date-fns[4]

concurrently --prefix "{time}-{pid}" 'echo "hello\n"' 'echo "world\n"' "git status"

复制

--prefix-colors (-c)

自定义前缀颜色,颜色列表请参考 chalk[5]

concurrently -c "bgBlue.bold,bgMagenta.bold" 'echo "hello\n"' 'echo "world\n"' "git status"

复制

自动改变前缀颜色:

concurrently -c auto --prefix "{time}-{pid}" 'echo "hello\n"' 'echo "world\n"' "git status"

复制

--names

自定义前缀名称

concurrently --names "HELLO,WORLD,GH" -c "auto" 'echo "hello\n"' 'echo "world\n"' "git status"

复制

名词解释

  • 标准流 (Standard streams)[6] - 在 Unix 和类 Unix 系统中,如同某些编程语言接口一样,标准流是当一个计算机程序执行时,在它和它的环境间(一般指终端),事先连接的输入和输出频道。这三个 I/O
    链接称作“标准输入”、“标准输出”和“标准错误输出”。

    • 标准输入 (stdin) - 指输入至程序的资料(通常是文件)。程序要求以读 (read) 操作来传输资料。并非所有程序都要求输入。如 dir
      ls
      程序(显示一个目录中的文件名)运行时不用任何输入。除非被重导向 (redirection: 进程间通信的一种形式)
      ,否则输入一般从键盘获取。

    • 标准输出 (stdout) - 指程序写输出资料的流。程序要求资料传输使用写 (write) 的运算。并非所有程序都要求输出。如 mv
      ren
      程序在成功完成时是沉默的。除非被重导向,否则输出一般是终端。

    • 标准错误输出 (stderr) - 另一输出流,用于输出错误消息或诊断。它独立于标准输出,且可以分别被重导。常见的目的则为启始这个程序的终端,即使其标准输出被重导亦如此。例如:一个流水线中的程序的输出被重导到下一个程序,但错误消息仍然直接流向文字终端。

References

[1]

npm: https://www.npmjs.com/

[2]

Node.js: https://nodejs.org/

[3]

concurrently: https://github.com/open-cli-tools/concurrently

[4]

date-fns: https://date-fns.org/v2.0.1/docs/format

[5]

chalk: https://github.com/chalk/chalk

[6]

标准流 (Standard streams): https://en.wikipedia.org/wiki/Standard_streams


文章转载自浮之静,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论