@dsherret/shell

中文文档
0.7.2发布于 2026/10/06MITES Module构建来源已验证近 30 天下载 8万

命令执行 和 dax 使用的 shell 解析器 .

中文使用文档
文档目录5 节
  1. 安装
  2. 使用量
  3. 内插命令
  4. build$
  5. 自定义命令

外壳

JSR npm

命令执行和 shell 解析器 dax。 。 。 .

多数用户应联系 dax 它以这个包为基础,并增加了进度栏,伐木, request, (中文(简体) ), which,以及其他便利。 使用 @david/shell 直接当您想要的只是外壳层.

工作在德诺和Node.js.

安装

# npm
npm install @dsherret/shell

# jsr
deno add jsr:@david/shell

使用量

import $ from "@dsherret/shell";

// run a command (stdout inherits by default)
await $`echo 1 && echo 2`;

// capture output
const text = await $`echo hello`.text();
console.log(text); // "hello"

// interpolated args are escaped by default
const name = "some name with spaces";
await $`echo ${name}`;

// $.raw disables argument escaping
await $.raw`echo one two three`;

// $.rawArg opts a single value out of escaping
await $`echo ${$.rawArg("1   2   3")}`;

内插命令

将命令替换到其捕获的 stdout, 类似于 $(...) 在外壳中:

const name = $`echo world`;
await $`echo hello ${name}`; // hello world
await $`echo 'hello ${name}'`; // works inside quotes too
await $`cat < ${name}`; // or as an input redirect

内插命令在周边命令评价其参数时会懒散地运行,所以当短路离开时它就永远不会运行(例如插到 $`exit 1 && echo ${cmd}` 不运行). 它使用自己的配置执行(env,cwd等),但stdout被捕获并stderr默认为评价命令的stderr. 如果失败, 评估它的命令会以退出代码失败 .noThrow() 以容忍失败 一样 $(...),只有在没有其他东西先决定退出代码(ex. $`echo ${cmd} | cat` 带有 cat'状态,除非 .pipefail() 已设定).

喜欢 $(...),一个未被引用的替代单词将其输出分解成多个参数并扩展出 glob 字符——插入内引出(ex. $`echo "${cmd}"`)以一一辩.

在输入重定向位置, $`cat < ${cmd}` 将命令的原始 stdout 直接流到重定向( 没有抓取或分字) , 而引用 $`cat < "${cmd}"` 将其输出替换为要读取的文件路径。 流出命令的退出代码只在读取命令消耗其全部输出时——当读取命令提前停止时,它就会被杀死并被忽略,就像管子的左侧一样.

内插值或字面命令文本都不得包含 NUL 字符(\0)——它被保留为内部划界人,所以无论哪种情况都会导致 TypeError。 。 。 .

build$

build$ 创建一个 $ 约束于特定 CommandBuilder 和/或附有额外属性.

import { build$, CommandBuilder } from "@dsherret/shell";

const $ = build$({
  commandBuilder: new CommandBuilder().env("MY_VAR", "123"),
  extras: {
    add(a: number, b: number) {
      return a + b;
    },
  },
});

await $`echo $MY_VAR`; // uses the configured env
console.log($.add(1, 2)); // 3

打电话 $.build$(...) 生出一个孩子 $ 它继承了父命令构建器状态,并合并了顶上的任何新的额外内容.

自定义命令

注册一个执行内置命令的处理器 :

import { CommandBuilder } from "@dsherret/shell";

const result = await new CommandBuilder()
  .registerCommand("greet", async (ctx) => {
    await ctx.stdout.writeLine(`hello ${ctx.args[0] ?? "world"}`);
    return { code: 0 };
  })
  .command("greet friend")
  .stdout("piped");

console.log(result.stdout); // "hello friend\n"

见 mod.ts 完全公开的API: $编号 :build$, (中文(简体) ), CommandBuilder, (中文(简体) ), CommandChild, (中文(简体) ), CommandResult, (中文(简体) ), KillController编号 :KillSignal, (中文(简体) ), ProcessTracker, (中文(简体) ), escapeArg, (中文(简体) ), createExecutableCommand,文件帮助者(create, (中文(简体) ), open, (中文(简体) ), FsFile),以及命令处理器、管子和弹壳结果的类型.

版本与发布记录

@dsherret/shell 共发布 4 个版本,首次发布于 2026/09/01;过去 12 个月发布了 4 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.7.2latest2026/10/061 个月前
0.7.12026/10/051 个月前
0.7.02026/09/012 个月前
0.6.02026/09/012 个月前

关于 @dsherret/shell 的常见问题

@dsherret/shell 是什么?

命令执行 和 dax 使用的 shell 解析器 .

如何安装 @dsherret/shell?

在项目目录运行 npm install @dsherret/shell,或使用 pnpm add / yarn add / bun add。

@dsherret/shell 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/dsherret__shell 是否存在。

@dsherret/shell 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@dsherret/shell 可以商用吗?

@dsherret/shell 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dsherret/shell 的下载量有多少?

根据 npm 官方下载统计,@dsherret/shell 在 2026/10/13 – 2026/11/11 这 30 天内被下载 79,652 次,日均约 2,655 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dsherret/shell 还在维护吗?

最新版本 0.7.2 发布于 2026/10/06(1 个月前);至今共发布 4 个版本,其中过去 12 个月发布了 4 个;首次发布于 2026/09/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。