diff --git a/.vuepress/configs/sidebar/zh-CN.ts b/.vuepress/configs/sidebar/zh-CN.ts index 8db194312f4..851b6445b94 100644 --- a/.vuepress/configs/sidebar/zh-CN.ts +++ b/.vuepress/configs/sidebar/zh-CN.ts @@ -64,6 +64,7 @@ export const sidebarZhCN: SidebarConfig = { '/zh-CN/book/overlays.md', '/zh-CN/book/sorting.md', '/zh-CN/book/testing.md', + '/zh-CN/book/debugging.md', '/zh-CN/book/style_guide.md', ], }, @@ -93,6 +94,7 @@ export const sidebarZhCN: SidebarConfig = { children: [ '/zh-CN/book/coming_from_bash.md', '/zh-CN/book/coming_from_cmd.md', + '/zh-CN/book/coming_from_powershell.md', '/zh-CN/book/nushell_map.md', '/zh-CN/book/nushell_map_imperative.md', '/zh-CN/book/nushell_map_functional.md', @@ -117,6 +119,8 @@ export const sidebarZhCN: SidebarConfig = { '/zh-CN/book/parallelism.md', '/zh-CN/book/plugins.md', '/zh-CN/book/explore.md', + '/zh-CN/book/tui.md', + '/zh-CN/book/mcp.md', ], }, ], diff --git a/tools/i18n-meta.json b/tools/i18n-meta.json index 5f693d46cda..ff2ac9abcf5 100644 --- a/tools/i18n-meta.json +++ b/tools/i18n-meta.json @@ -116,6 +116,19 @@ "ru": "-", "ko": "-" }, + { + "name": "coming_from_powershell.md", + "en": "Completed", + "zh-CN": "e9317a86@passionworkeer", + "fr": "-", + "de": "-", + "tr": "-", + "ja": "-", + "es": "-", + "pt-BR": "-", + "ru": "-", + "ko": "-" + }, { "name": "coming_to_nu.md", "en": "In progress", @@ -207,6 +220,19 @@ "ru": "-", "ko": "-" }, + { + "name": "debugging.md", + "en": "Completed", + "zh-CN": "ff1c4786@passionworkeer", + "fr": "-", + "de": "-", + "tr": "-", + "ja": "-", + "es": "-", + "pt-BR": "-", + "ru": "-", + "ko": "-" + }, { "name": "dataframes.md", "en": "Completed", @@ -376,6 +402,19 @@ "ru": "-", "ko": "-" }, + { + "name": "mcp.md", + "en": "Completed", + "zh-CN": "ff1c4786@passionworkeer", + "fr": "-", + "de": "-", + "tr": "-", + "ja": "-", + "es": "-", + "pt-BR": "-", + "ru": "-", + "ko": "-" + }, { "name": "metadata.md", "en": "Completed", @@ -701,6 +740,19 @@ "ru": "-", "ko": "-" }, + { + "name": "tui.md", + "en": "Completed", + "zh-CN": "ff1c4786@passionworkeer", + "fr": "-", + "de": "-", + "tr": "-", + "ja": "-", + "es": "-", + "pt-BR": "-", + "ru": "-", + "ko": "-" + }, { "name": "types_of_data.md", "en": "Completed", diff --git a/zh-CN/book/advanced.md b/zh-CN/book/advanced.md index 3dbadfbdaf0..eb55f4c5d86 100644 --- a/zh-CN/book/advanced.md +++ b/zh-CN/book/advanced.md @@ -14,7 +14,9 @@ Nushell 中的值包含一些额外的[元数据](metadata.md)。 由于 Nushell 严格的作用域规则,[并行迭代集合](parallelism.md)非常容易,这可以帮助你通过只输入几个字符来加速长时间运行的脚本。 -你可以使用 [`explore`](/commands/docs/explore.md) 命令[交互式地探索数据](explore.md)。 +你可以使用 [`explore`](/commands/docs/explore.md) 命令[交互式地探索数据](explore.md),也可以通过 `tui` 命令族[构建你专属的终端用户界面](tui.md)(如选择器、对话框和监控仪表盘)。 -最后,你可以使用[插件](plugins.md)来扩展 Nushell 的功能。 +你可以使用[插件](plugins.md)来扩展 Nushell 的功能。 几乎任何东西都可以成为插件,只要它以 Nushell 理解的协议与 Nushell 通信。 + +最后,Nushell 可以作为 [MCP 服务器](mcp.md)运行,使 AI Agent 和其他 Model Context Protocol 客户端能够查询其命令并执行 Nushell 代码。 diff --git a/zh-CN/book/coming_from_powershell.md b/zh-CN/book/coming_from_powershell.md new file mode 100644 index 00000000000..ad7aad6f317 --- /dev/null +++ b/zh-CN/book/coming_from_powershell.md @@ -0,0 +1,82 @@ +# 从 PowerShell 到 Nu + +::: tip +PowerShell 管道传递的是丰富的 **.NET 对象**,支持通过 `$process.Name` 等语法直接访问属性,或者直接将对象通过管道传递给支持该对象的 cmdlet。 + +相比之下,Nushell 管道传递的是表格、列表和值等**结构化数据**。 +这意味着: + +- 不支持 `.PropertyName` 语法访问属性 +- 改用 `get column`、`select`、`$it.column` 或表格操作 +- 命令始终接收可预测的结构化输入,而非字符串或 .NET 类型 + ::: + +## 等价命令参考: + +| PowerShell | Nu | 任务 | +| --------------------------------------------------------------- | -------------------------------------------- | ---------------------------------- | +| `Get-ChildItem` | `ls` | 列出当前目录中的文件 | +| `Get-ChildItem ` | `ls ` | 列出指定目录中的文件 | +| `Get-ChildItem pattern*` | `ls pattern*` | 模式匹配文件 | +| `Get-ChildItem -Force -File -Hidden` | `ls --long --all` 或 `ls -la` | 详细列出文件(包含隐藏文件) | +| `Get-ChildItem \| Where-Object { $_.PSIsContainer }` | `ls \| where type == dir` | 仅列出目录 | +| `Get-ChildItem -Recurse -Filter *.rs` | `ls **/*.rs` | 递归搜索文件 | +| `Get-ChildItem -Recurse Makefile \| Select-Object -Expand Name` | `ls **/Makefile \| get name \| vim ...$in` | 将匹配的文件路径传递给命令 | +| `Set-Location ` | `cd ` | 切换目录 | +| `Set-Location` | `cd` | 返回主目录 | +| `Set-Location -` | `cd -` | 返回上一个目录 | +| `New-Item -ItemType Directory ` | `mkdir ` | 创建目录 | +| `New-Item test.txt` | `touch test.txt` | 创建文件 | +| `command \| Out-File ` | `out> ` 或 `o> ` | 保存输出到文件(原始文本) | +| `command \| Set-Content ` | `\| save ` | 保存输出到文件(结构化) | +| `command \| Out-File -Append ` | `out>> ` 或 `o>> ` | 追加输出到文件 | +| | `\| save --append ` | 追加结构化输出 | +| `command \| Out-Null` | `\| ignore` | 丢弃输出 | +| `cmd1 \| Tee-Object -FilePath log.txt \| cmd2` | `cmd1 \| tee { save log.txt } \| cmd2` | 将输出同时保存到文件 | +| `command \| Select-Object -First 5` | `command \| first 5` | 限制输出前 N 行 | +| `Get-Content ` | `open --raw ` | 显示文件内容 | +| `Move-Item ` | `mv ` | 移动文件 | +| `Get-ChildItem *.md \| ForEach-Object { $_.Name }` | `ls *.md \| each { $in.name }` | 遍历列表值 | +| `foreach ($i in 1..10) { $i }` | `for i in 1..10 { print $i }` | 遍历指定范围 | +| `Copy-Item ` | `cp ` | 复制文件 | +| `Copy-Item -Recurse ` | `cp -r ` | 递归复制目录 | +| `Remove-Item ` | `rm ` | 删除文件 | +| | `rm -t ` | 将文件移至回收站 | +| `Remove-Item -Recurse -Force ` | `rm -r ` | 递归删除目录 | +| `Get-Date ""` | `"" \| into datetime -f ` | 解析日期 | +| `"" -replace 'a','b'` | `str replace "a" "b"` | 替换子字符串 | +| `Select-String ` | `where $it =~ ` 或 `find ` | 搜索文本 | +| `Get-Help ` | `help ` | 查看命令帮助 | +| `Get-Command` | `help commands` | 列出所有命令 | +| `Get-Command "**"` | `help --find ` | 搜索命令 | +| `command1; if ($?) { command2 }` | `command1; command2` | 仅在第一个命令成功时运行第二个命令 | +| `/tmp/$((Get-Random))` | `$"/tmp/(random int)"` | 字符串插值 | +| `$env:Path` | `$env.PATH` 或 `$env.Path` | 显示 PATH | +| `$LASTEXITCODE` | `$env.LAST_EXIT_CODE` | 上一个外部命令的退出码 | +| `$env:PATH += ":/usr/bin"` | `$env.PATH = ($env.PATH \| append /usr/bin)` | 更新 PATH(临时生效) | +| `Get-ChildItem Env:` | `$env` | 列出环境变量 | +| `$env:FOO` | `$env.FOO` | 访问环境变量 | +| `Remove-Item Env:FOO` | `hide-env FOO` | 取消设置环境变量 | +| `Set-Alias s "git status -sb"` | `alias s = git status -sb` | 临时别名 | +| `Get-Command FOO` | `which FOO` | 检查命令 / 别名 / 二进制文件 | +| `powershell -Command ""` | `nu -c ` | 运行内联管道 | +| `.\script.ps1` | `nu