# @dsherret/shell 中文文档

规范地址：https://npmcn.com/package/%40dsherret/shell/

版本：0\.7\.2
npm 元数据更新时间：2026-10-05T16:32:44.849Z
中文译文更新时间：2026-11-12T21:34:34.547Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40dsherret/shell
原文对照：https://npmcn.com/package/%40dsherret/shell/?lang=original
项目主页：https://github.com/dsherret/shell#readme
源码仓库：https://github.com/dsherret/shell

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：469 kB，58 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：2 个
- 首次发布：2026-09-01T14:53:51.198Z
- 最新版本发布：2026-10-05T16:32:44.526Z
- 近 30 天下载量：79652（2026-10-13 至 2026-11-11，npm 官方下载统计）
- 已发布版本数：4（近 12 个月 4 个）

## 中文简介

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

## 安装

```sh
npm install @dsherret/shell
```

也可以使用：`pnpm add @dsherret/shell`、`yarn add @dsherret/shell`、`bun add @dsherret/shell`

## README

# 外壳

[![JSR](https://jsr.io/badges/@david/shell)](https://jsr.io/@david/shell) [![npm](https://img.shields.io/npm/v/@dsherret/shell)](https://www.npmjs.com/package/@dsherret/shell)

命令执行和 shell 解析器 [`dax`](https://github.com/dsherret/dax)。 。 。 .

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

工作在德诺和Node.js.

## 安装

```sh
# npm
npm install @dsherret/shell

# jsr
deno add jsr:@david/shell
```

## 使用量

```ts
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, 类似于 `$(...)` 在外壳中:

```ts
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` 和/或附有额外属性.

```ts
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$(...)` 生出一个孩子 `$` 它继承了父命令构建器状态,并合并了顶上的任何新的额外内容.

## 自定义命令

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

```ts
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`](https://npmcn.com/package/%40dsherret/shell/mod.ts) 完全公开的API: `$`编号 :`build$`, (中文(简体) ), `CommandBuilder`, (中文(简体) ), `CommandChild`, (中文(简体) ), `CommandResult`, (中文(简体) ), `KillController`编号 :`KillSignal`, (中文(简体) ), `ProcessTracker`, (中文(简体) ), `escapeArg`, (中文(简体) ), `createExecutableCommand`,文件帮助者(`create`, (中文(简体) ), `open`, (中文(简体) ), `FsFile`),以及命令处理器、管子和弹壳结果的类型.

## 常见问题

### @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 和提交记录判断。

