13 个版本

0.7.1 2024年6月29日
0.6.4 2022年10月2日
0.6.0 2022年7月4日

#78命令行工具

Download history 332/week @ 2024-05-04 475/week @ 2024-05-11 166/week @ 2024-05-18 240/week @ 2024-05-25 169/week @ 2024-06-01 289/week @ 2024-06-08 224/week @ 2024-06-15 494/week @ 2024-06-22 437/week @ 2024-06-29 208/week @ 2024-07-06 118/week @ 2024-07-13 150/week @ 2024-07-20 132/week @ 2024-07-27 149/week @ 2024-08-03 224/week @ 2024-08-10 170/week @ 2024-08-17

710 每月下载量

MIT 许可证

410KB
12K SLoC

mprocs

mprocs 并行运行多个命令,并单独显示每个命令的输出。

当你在项目上工作时,你经常会需要运行相同的命令列表。例如: webpack servejest --watchnode src/server.js。使用 mprocs,你可以将这些命令列在 mprocs.yaml 中,并运行 mprocs 来运行所有命令。然后你可以切换到正在运行的命令的输出并与它们交互。

它类似于 concurrently,但 mprocs 会单独显示每个命令的输出,并允许与进程交互(你甚至可以在 mprocs 中使用 vim)。

截图

安装

Packaging status

下载二进制文件(Linux、Macos、Windows)

下载适用于您平台的可执行文件并将其放入 PATH 目录中

npm(Linux、Macos、Windows)

npm install -g mprocs
yarn global add mprocs

homebrew(Macos、Linux)

brew install mprocs

cargo(所有平台)

cargo install mprocs

scoop(Windows)

scoop install mprocs

AUR(Arch Linux)

yay mprocs
yay mprocs-bin

MPR(Debian/Ubuntu)

git clone 'https://mpr.makedeb.org/mprocs'
cd mprocs/
makedeb -si

用法

  1. 运行 mprocs cmd1 cmd2 …(示例:mprocs "yarn test -w" "webpack serve"

或者

  1. 创建 mprocs.yaml 文件
  2. 运行 mprocs 命令

示例 mprocs.yaml

procs:
  nvim:
    cmd: ["nvim"]
  server:
    shell: "nodemon server.js"
  webpack: "webpack serve"
  tests:
    shell: "jest -w"
    env:
      NODE_ENV: test

配置

JSON/YAML 配置模式

配置有两种类型:全局和本地。 全局 配置从 ~/.config/mprocs/mprocs.yaml (或 Windows 上的 ~\AppData\Roaming\mprocs\mprocs.yaml) 加载。 本地 配置从当前目录的 mprocs.yaml 加载(或通过命令行参数设置: mprocs --config ./cfg/mprocs.yaml)。本地配置中的设置会覆盖全局配置中的设置。

  • procs: 对象 - 要运行的过程。仅允许在本地配置中使用。
    • shell: 字符串 - 要运行的 Shell 命令(必须提供 shellcmd 中的一个)。
    • cmd: 数组 - 要运行命令和参数的数组(必须提供 shellcmd 中的一个)。
    • cwd: 字符串 - 设置进程的工作目录。前缀 <CONFIG_DIR> 将替换为配置所在目录的路径。
    • env: 对象<字符串,字符串|null> - 设置环境变量。对象键是变量名称。将变量赋值为 null,以清除从父进程继承的环境变量。
    • add_path: 字符串|数组 - 将条目添加到 PATH 环境变量。
    • autostart: 布尔值 - 当 mprocs 启动时启动进程。默认:true
    • autorestart: 布尔值 - 当进程退出时重启进程。默认:false。注意:如果进程在启动后 1 秒内退出,它将不会重启。
    • stop: "SIGINT"|"SIGTERM"|"SIGKILL"|{send-keys: 数组}|"hard-kill" - 停止进程的方式(使用 x 键或在退出 mprocs 时)。
  • hide_keymap_window: 布尔值 - 隐藏显示键绑定的屏幕底部的面板。
  • mouse_scroll_speed: 整数 - 每次鼠标滚动滚动的行数。
  • scrollback: 整数 - 滚动大小。默认:1000
  • proc_list_width: 整数 - 进程列表窗口宽度。
  • keymap_procs: 对象 - 进程列表的键绑定。见 键绑定
  • keymap_term: 对象 - 终端窗口的键绑定。见 键绑定
  • keymap_copy: 对象 - 复制模式的键绑定。见 键绑定

快捷键映射

默认键绑定可以在配置中使用 keymap_procskeymap_termkeymap_copy 字段覆盖。可用命令在 远程控制 部分中记录。

存在三个键绑定级别

  • 默认键绑定
  • ~/.config/mprocs/mprocs.yaml (或 Windows 上的 ~\AppData\Roaming\mprocs\mprocs.yaml)
  • ./mprocs.yaml (可由 -c/--config 命令行参数覆盖)

低级别覆盖高级别的绑定。可以通过在相同级别指定 reset: true 字段来清除高级别的键绑定。

快捷键在 <> 之间定义,例如:<Enter>(回车键),<Down>(向下箭头),<Up>(向上箭头),<C-q>(CTRL + q)。

keymap_procs: # keymap when process list is focused
  <C-q>: { c: toggle-focus }
  <C-a>: null # unbind key
keymap_term: # keymap when terminal is focused
  reset: true
  <C-q>: { c: toggle-focus }
  <C-j>:
    c: batch
    cmds:
      - { c: focus-procs }
      - { c: next-proc }

$select 操作符

您可以根据当前操作系统定义不同的值。任何配置中的值都可以用 $select 操作符包裹。要基于当前操作系统提供不同的值,请定义一个对象

  • 第一个字段 $select: os
  • 定义不同操作系统值的字段:macos: value。可能值列在这里:https://doc.rust-lang.net.cn/std/env/consts/constant.OS.html
  • 字段 $else: 默认值 如果未为当前操作系统定义值,将会匹配。如果当前操作系统不匹配且缺少字段 $else,则 mprocs 将无法加载配置。

示例 mprocs.yaml

procs:
  my process:
    shell:
      $select: os
      windows: "echo %TEXT%"
      $else: "echo $TEXT"
    env:
      TEXT:
        $select: os
        windows: Windows
        linux: Linux
        macos: Macos
        freebsd: FreeBSD

从 package.json 运行脚本

如果您使用 mprocs--npm 参数运行,它将加载 package.json 中的脚本。但是默认情况下,脚本不会运行,您可以手动启动所需的脚本。

# Run mprocs with scripts from package.json
mprocs --npm

默认快捷键映射

聚焦于进程列表

  • q - 退出(软杀死进程并等待然后退出)
  • Q - 强制退出(终止进程)
  • C-a - 聚焦输出面板
  • x - 软杀死选定的进程(发送 SIGTERM 信号,在 Windows 上硬杀死)
  • X - 硬杀死选定的进程(发送 SIGKILL)
  • s - 如果未运行,则启动选定的进程
  • r - 软杀死选定的进程,并在停止时重启它
  • R - 硬杀死选定的进程,并在停止时重启它
  • a - 添加新进程
  • C - 复制选定的进程
  • d - 删除选定的进程(进程必须首先停止)
  • e - 重命名选定的进程
  • k - 选择上一个进程
  • j - 选择下一个进程
  • M-1 - M-8 - 选择进程 1-8
  • C-dpage down - 向下滚动输出
  • C-upage up - 向上滚动输出
  • C-e - 向下滚动输出 3 行
  • C-y - 向上滚动输出 3 行
  • z - 放大终端窗口
  • v - 进入复制模式

聚焦于进程输出

  • C-a - 聚焦进程面板

复制模式

  • v - 开始选择终点
  • c - 复制选定的文本
  • Esc - 离开复制模式
  • C-a - 聚焦进程面板
  • C-dpage down - 向下滚动输出
  • C-upage up - 向上滚动输出
  • C-e - 向下滚动输出 3 行
  • C-y - 向上滚动输出 3 行
  • h - 向上移动光标
  • l - 向右移动光标
  • j - 向下移动光标
  • h - 将光标左移

远程控制

可选地,mprocs 可以监听 TCP 端口以接收远程命令。您需要在 mprocs.yaml 文件中定义远程控制服务器地址(server: 127.0.0.1:4050)或通过 CLI 参数(mprocs --server 127.0.0.1:4050)。要向运行中的 mprocs 实例发送命令,使用 ctl 参数:mprocs --ctl '{c: quit}'mprocs --ctl '{c: send-key, key: <C->}')。

命令以 YAML 编码。可用命令

  • {c: quit-or-ask} - 停止进程并退出。如果有任何进程正在运行,则显示确认对话框。
  • {c: quit} - 停止进程并退出。不显示确认对话框。
  • {c:force-quit}
  • {c: toggle-focus} - 在进程列表和终端之间切换焦点。
  • {c: focus-procs} - 焦点在进程列表上
  • {c: focus-term} - 焦点在进程终端窗口上
  • {c: zoom} - 缩放终端窗口
  • {c:next-proc}
  • {c:prev-proc}
  • {c: select-proc, index: <PROCESS INDEX>} - 通过索引选择进程,顶级进程索引为 0
  • {c:start-proc}
  • {c:term-proc}
  • {c:kill-proc}
  • {c:restart-proc}
  • {c:force-restart-proc}
  • {c:show-add-proc}
  • {c:add-proc,cmd: "<SHELL COMMAND>"}
  • {c:duplicate-proc}
  • {c:show-remove-proc}
  • {c:remove-proc,id: "<PROCESS ID>"}
  • {c:show-rename-proc}
  • {c: rename-proc, name: "<NEW_NAME>"} - 重命名当前选定的进程
  • {c:滚动-向下}
  • {c:滚动-向上}
  • {c:滚动-向下-,n: <计数>}
  • {c:滚动-向上-,n: <计数>}
  • {c: copy-mode-enter} - 进入复制模式
  • {c: copy-mode-leave} - 离开复制模式
  • {c: copy-mode-move, dir: <DIRECTION> } - 移动选择的起始或结束位置。可用方向:///
  • {c: copy-mode-end} - 开始选择选择的终点。
  • {c: copy-mode-copy} - 将所选文本复制到剪贴板并离开复制模式。
  • {c: send-key, key: "<KEY>"} - 向当前进程发送键。键示例:<C-a><Enter>
  • {c: batch, cmds: [{c: focus-procs},]} - 发送多个命令

常见问题解答

mprocs 与 tmux/screen 的比较

mprocs旨在使运行重复执行的特定命令更容易,例如编译器和测试运行器。这与tmux形成对比,通常用于在每个窗口/面板中运行更长时间的生命周期进程 - 通常是一个shell。另一个区别是tmux运行一个服务器和一个客户端,这允许客户端稍后断开并重新连接,保持进程运行。mprocs更多是为了有限生命周期的进程,您会不断重新运行,但当mprocs结束时,它在其中运行的进程也会结束。

在tmux中复制不起作用

Tmux默认未启用复制逃逸序列。要启用它,请将以下内容添加到~/.tmux.conf

set -g set-clipboard on

依赖关系

~35–50MB
~1M SLoC