
# CLI

Rudel 会在 `wp rudel` 下注册其命令。WP-CLI 遇到此处未列出的命令选项时，会以 `unknown --<name> parameter` 拒绝该选项。

你可以在插件加载前于 `wp-config.php` 中定义 `RUDEL_CLI_COMMAND`，以便在嵌入式使用场景中重命名根命令。

```php
define( 'RUDEL_CLI_COMMAND', 'sandbox' );
```

这会将 `wp rudel create` 改为 `wp sandbox create`。命令行为不会改变。

默认情况下，命令在主机上运行。若要在沙盒内运行其他任意 WP-CLI 命令，请设置 `RUDEL_ENVIRONMENT`：

```bash
RUDEL_ENVIRONMENT=alpha-3be7 wp option get blogname
```

## 创建

```bash
wp rudel create [--name=<name>] [--theme=<slug>] [--clone-from=<id>] [--owner=<owner>] [--labels=<labels>] [--purpose=<purpose>] [--protected] [--ttl-days=<days>] [--expires-at=<timestamp>] [--git=<remote>] [--type=<theme|plugin>] [--template=<label>]
```

创建一个沙盒并打印其 ID。

| 选项 | 含义 |
|--------|---------|
| `--name` | 易读名称。ID 由名称和四个十六进制字符组成。默认使用仓库名称；若有 `--git` 则使用该名称，否则使用 `sandbox`。 |
| `--theme` | 要复制到沙盒中的主题。必须已安装在主机上。默认使用主机的活动主题；若有 `--clone-from`，则使用源沙盒的主题。 |
| `--clone-from` | 从现有沙盒克隆表和主题，而不是从主机克隆。 |
| `--owner`、`--labels`、`--purpose` | 元数据。标签以逗号分隔。 |
| `--protected` | 在清理时排除该沙盒。 |
| `--ttl-days` | 相对于创建时间的到期时间。 |
| `--expires-at` | 明确指定的到期时间戳。 |
| `--git` | 将远程仓库克隆到沙盒目录中。请参阅 [Git](https://rudel.inline0.dev/zh/docs/features/git)。 |
| `--type` | `--git` 的检出位置：`theme`（默认）或 `plugin`。 |
| `--template` | 存储在记录中的标签，默认为 `blank`。不会加载已保存的模板。 |

`--clone-db`、`--clone-themes`、`--clone-plugins`、`--clone-uploads`、`--clone-all`、`--shared-plugins` 和 `--shared-uploads` 已弃用。它们只会更改进度消息：每个沙盒都会克隆表、复制一个主题，并共用插件和上传文件。

命令结束时会提示你 `cd` 进入沙盒目录并运行 `wp post list`。该命令会在主机上运行，因为沙盒目录中的 `wp-cli.yml` 指向主机的 URL。请改用 `RUDEL_ENVIRONMENT`。

## 列表

```bash
wp rudel list [--format=<table|json|csv|yaml|count>]
```

列出沙盒及其 ID、名称、所有者、保护状态、到期时间、状态、模板标签、创建时间和目录大小。

## 信息

```bash
wp rudel info <id> [--format=<table|json|yaml>]
```

显示一条沙盒记录，包括表前缀、主题、标签、克隆元数据、URL 和内容路径。

## 更新

```bash
wp rudel update <id> [--owner=<owner>] [--labels=<labels>] [--purpose=<purpose>] [--protected] [--unprotected] [--ttl-days=<days>] [--expires-at=<timestamp>] [--clear-expiry]
```

更新元数据。`--ttl-days` 从当前时间开始计算。不会更改沙盒站点内容。

## 销毁

```bash
wp rudel destroy <id> [--force]
```

删除沙盒表，移除其目录和关联的工作树，并删除其记录。命令会请求确认；`--force` 会跳过提示。保护状态不会阻止 `destroy`：受保护的沙盒也会像其他沙盒一样被销毁。

## 状态

```bash
wp rudel status
```

打印一张表，显示引导状态、当前沙盒、沙盒目录、沙盒数量、`rudel_config` 值，以及是否已安排自动化任务。它始终打印表格，并忽略 `--format`。

## 清理

```bash
wp rudel cleanup [--dry-run] [--max-age-days=<days>] [--max-idle-days=<days>] [--merged]
```

不带 `--merged` 时，会移除未受保护且已到期、超过存续期限或空闲时间超过限制的沙盒。`--max-age-days` 和 `--max-idle-days` 会在本次运行中覆盖 `rudel_config`。带 `--merged` 时，会移除关联的 Git 工作树分支已合并的沙盒。始终跳过受保护的沙盒。请参阅 [清理](https://rudel.inline0.dev/zh/docs/features/cleanup)。

## 日志

```bash
wp rudel logs <id> [--lines=<lines>] [--follow] [--clear]
```

打印沙盒 `debug.log` 的最后几行（默认为 50 行）。`--follow` 会运行 `tail -f`；`--clear` 会清空文件。请参阅 [错误日志记录](https://rudel.inline0.dev/zh/docs/features/logging)。

## 快照

```bash
wp rudel snapshot <id> --name=<name>
```

创建一个具名快照。

## 恢复

```bash
wp rudel restore <id> --snapshot=<name> [--force]
```

还原快照。命令会请求确认；`--force` 会跳过提示。请参阅 [快照](https://rudel.inline0.dev/zh/docs/features/snapshots)。

## 模板

```bash
wp rudel template save <id> --name=<name> [--description=<description>]
wp rudel template list [--format=<table|json|csv|yaml|count>]
wp rudel template delete <name> [--force]
```

保存、列出和删除模板副本。没有命令会根据已保存的模板创建沙盒。请参阅 [模板](https://rudel.inline0.dev/zh/docs/features/templates)。

## 推送

```bash
wp rudel push <id> [--git=<remote>] [--dir=<dir>] [--message=<message>]
```

将沙盒目录中的检出提交并推送到分支 `rudel/<id>`。

| 选项 | 含义 |
|--------|---------|
| `--git` | 远程 URL。仅在未存储任何远程时需要；首次成功推送后会记住该值。 |
| `--dir` | 相对于沙盒目录的目录，例如 `themes/my-theme`。默认为已存储的检出目录；若未存储，则使用整个沙盒目录。 |
| `--message` | 提交消息，默认为 `Update from Rudel sandbox`。 |

请参阅 [Git](https://rudel.inline0.dev/zh/docs/features/git)。
