Skip to content

Commit

Permalink
[zh-CN] Update README, and Getting Started (入门篇) (#1168)
Browse files Browse the repository at this point in the history
- `zh-CN/README.md`
- `zh-CN/book/README.md`
- `zh-CN/book/installation.md`
- `zh-CN/book/thinking_in_nu.md`
- `zh-CN/book/moving_around.md`

Guide: [*Chinese Copywriting Guidelines*](https://github.com/sparanoid/chinese-copywriting-guidelines)
Formatter: [autocorrect](https://github.com/huacnlee/autocorrect)
  • Loading branch information
CAESIUS-TIM authored Dec 10, 2023
1 parent a0c6cc5 commit 6314e1c
Show file tree
Hide file tree
Showing 5 changed files with 135 additions and 83 deletions.
8 changes: 5 additions & 3 deletions zh-CN/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,22 @@ Nu 在类型化的数据上操作,所以它能捕捉到其他 Shell 无法捕

## 获取 Nu

Nushell 可以通过 [你喜欢的软件包管理器](https://repology.org/project/nushell/versions) 来安装 [可下载的二进制文件](https://github.com/nushell/nushell/releases),可以在 [GitHub Action](https://github.com/marketplace/actions/setup-nu) 中使用,此外也可以以 [源码](https://github.com/nushell/nushell)方式获得。在此阅读 [详细的安装说明](/zh-CN/book/installation.md)或直接开始:
Nushell 可以通过 [你喜欢的软件包管理器](https://repology.org/project/nushell/versions) 来安装 [可下载的二进制文件](https://github.com/nushell/nushell/releases),可以在 [GitHub Action](https://github.com/marketplace/actions/setup-nu) 中使用,此外也可以以 [源码](https://github.com/nushell/nushell)方式获得。在此阅读 [详细的安装说明](/zh-CN/book/installation.md) 或直接开始:

#### macOS / Linux:

```sh
```shell
$ brew install nushell
```

#### Windows:

```powershell
```shell
$ winget install nushell
```

完成安装后,输入 `nu` 来启动 Nu。

## 社区

如果你有任何问题可以在 [Dicord](https://discord.gg/NtAbbGn) 上找到我们。
Expand Down
40 changes: 20 additions & 20 deletions zh-CN/book/README.md
Original file line number Diff line number Diff line change
@@ -1,75 +1,75 @@
# 介绍

你好,欢迎来到 Nushell 项目。这个项目的目标是继承 Unix Shell 中用管道把简单的命令连接在一起的理念,并将其带到更具现代风格的开发中。
你好,欢迎来到 Nushell 项目。这个项目的目标是继承 Unix Shell 中用管道把简单的命令连接在一起的理念,并将其带到更具现代风格的开发中。因此,Nushell 不是一个纯粹的 shell 或编程语言,而是通过将一种丰富的编程语言和功能齐全的 shell 结合到一个软件包中,实现了二者的连接。

Nu 汲取了很多常见领域的灵感:传统 Shell 比如 Bash、基于对象的 Shell 比如 PowerShell、逐步类型化的语言比如 TypeScript、函数式编程、系统编程,等等。但是,Nu 并不试图成为万金油,而是把精力集中在做好这几件事上:
Nu 汲取了很多常见领域的灵感:传统 Shell 比如 Bash、基于对象的 Shell 比如 PowerShell、逐步类型化的语言比如 TypeScript、函数式编程、系统编程,等等。但是,Nu 并不试图成为万金油,而是把精力集中在做好这几件事上

- 作为一个具有现代感的灵活的跨平台 Shell;
- 作为一种现代的编程语言,解决与数据有关的问题;
- 给予清晰的错误信息和干净的 IDE 支持
- 给予清晰的错误信息和干净的 IDE 支持

了解 Nu 能做什么的最简单的方法是从一些例子开始,所以让我们深入了解一下。

当你运行[`ls`](/commands/docs/ls.md)这样的命令时,你会注意到的第一件事是,你得到的不是一个文本块,而是一个结构化的表格:
当你运行 [`ls`](/commands/docs/ls.md) 这样的命令时,你会注意到的第一件事是,你得到的不是一个文本块,而是一个结构化的表格:

@[code](@snippets/introduction/ls_example.sh)

该表不仅仅是以不同的方式显示目录,就像电子表格中的表一样,它还允许我们以更加互动的方式来处理数据。

我们要做的第一件事是按大小对我们的表进行排序。要做到这一点,我们将从[`ls`](/commands/docs/ls.md)中获取输出,并将其输入到一个可以根据列的内容对表进行排序的命令中:
我们要做的第一件事是按大小对我们的表进行排序。要做到这一点,我们将从 [`ls`](/commands/docs/ls.md) 中获取输出,并将其输入到一个可以根据列的内容对表进行排序的命令中:

@[code](@snippets/introduction/ls_sort_by_reverse_example.sh)

你可以看到,为了达到这个目的,我们没有向[`ls`](/commands/docs/ls.md)传递命令行参数。取而代之的是,我们使用了 Nu 提供的`sort-by`命令来对[`ls`](/commands/docs/ls.md)命令的输出进行排序。为了在顶部看到最大的文件,我们还使用了[`reverse`](/commands/docs/reverse.md)命令。
你可以看到,为了达到这个目的,我们没有向 [`ls`](/commands/docs/ls.md) 传递命令行参数。取而代之的是,我们使用了 Nu 提供的 [`sort-by`](/commands/docs/sort-by.md) 命令来对 [`ls`](/commands/docs/ls.md) 命令的输出进行排序。为了在顶部看到最大的文件,我们还使用了 [`reverse`](/commands/docs/reverse.md) 命令。

Nu 提供了许多可以对表进行操作的命令,例如,我们可以过滤[`ls`](/commands/docs/ls.md)表的内容,使其只显示超过 1 千字节的文件。
Nu 提供了许多可以对表进行操作的命令,例如,我们可以过滤 [`ls`](/commands/docs/ls.md) 表的内容,使其只显示超过 1 千字节的文件。

@[code](@snippets/introduction/ls_where_example.sh)

就像在 Unix 哲学中一样,能够让命令相互对话给我们提供了在许多不同的组合中对命令进行混搭的方法。我们来看看一个不同的命令:

@[code](@snippets/introduction/ps_example.sh)

如果你使用过 Linux,你可能对[`ps`](/commands/docs/ps.md)命令很熟悉。通过它,我们可以得到一个当前系统正在运行的所有进程的列表,它们的状态是什么,以及它们的名字是什么,我们还可以看到这些进程的 CPU 负载。
如果你使用过 Linux,你可能对 [`ps`](/commands/docs/ps.md) 命令很熟悉。通过它,我们可以得到一个当前系统正在运行的所有进程的列表,它们的状态是什么,以及它们的名字是什么,我们还可以看到这些进程的 CPU 负载。

如果我们想显示那些正在活跃使用 CPU 的进程呢?就像我们之前对[`ls`](/commands/docs/ls.md)命令所做的那样,我们也可以利用[`ps`](/commands/docs/ps.md)命令返回给我们的表格来做到:
如果我们想显示那些正在活跃使用 CPU 的进程呢?就像我们之前对 [`ls`](/commands/docs/ls.md) 命令所做的那样,我们也可以利用 [`ps`](/commands/docs/ps.md) 命令返回给我们的表格来做到:

@[code](@snippets/introduction/ps_where_example.sh)

到目前为止,我们一直在使用[`ls`](/commands/docs/ls.md)[`ps`](/commands/docs/ps.md)来列出文件和进程。Nu 还提供了其他可以创建有用信息表格的命令。接下来,让我们试一下[`date`](/commands/docs/date.md)[`sys`](/commands/docs/sys.md)
到目前为止,我们一直在使用 [`ls`](/commands/docs/ls.md)[`ps`](/commands/docs/ps.md) 来列出文件和进程。Nu 还提供了其他可以创建有用信息表格的命令。接下来,让我们试一下 [`date`](/commands/docs/date.md)[`sys`](/commands/docs/sys.md)

运行`date now`输出关于当前日期和时间的信息:
运行 [`date now`](/commands/docs/date_now.md) 输出关于当前日期和时间的信息:

@[code](@snippets/introduction/date_example.sh)

为了将获得的日期以表格形式展示,我们可以把它输入到 `date to-table`中:
为了将获得的日期以表格形式展示,我们可以把它输入到 [`date to-table`](/commands/docs/date_to-table.md) 中:

@[code](@snippets/introduction/date_table_example.sh)

运行[`sys`](/commands/docs/sys.md)可以得到 Nu 所运行的系统的信息:
运行 [`sys`](/commands/docs/sys.md) 可以得到 Nu 所运行的系统的信息:

@[code](@snippets/introduction/sys_example.sh)

这与我们之前看到的表格有些不同。[`sys`](/commands/docs/sys.md)命令输出了一个在单元格中包含结构化表格而非简单值的表格。要查看这些数据,我们需要 _`get`_ 待查看的列:
这与我们之前看到的表格有些不同。[`sys`](/commands/docs/sys.md) 命令输出了一个在单元格中包含结构化表格而非简单值的表格。要查看这些数据,我们需要**获取**[`get`](/commands/docs/get.md)待查看的列:

@[code](@snippets/introduction/sys_get_example.sh)

[`get`](/commands/docs/get.md)命令让我们深入表的某一列内容中。在这里,我们要查看的是 "host" 列,它包含了 Nu 正在运行的主机的信息:操作系统名称、主机名、CPU,以及更多。让我们来获取系统上的用户名:
[`get`](/commands/docs/get.md) 命令让我们深入表的某一列内容中。在这里,我们要查看的是 `host` 列,它包含了 Nu 正在运行的主机的信息:操作系统名称、主机名、CPU,以及更多。让我们来获取系统上的用户名:

@[code](@snippets/introduction/sys_get_nested_example.sh)

现在,系统中只有一个名为 "jt" 的用户。你会注意到,我们可以传递一个列路径(`host.sessions.name`部分),而不仅仅是简单的列名称。Nu 会接受列路径并输出表中相应的数据。
现在,系统中只有一个名为 jt 的用户。你会注意到,我们可以传递一个列路径(`host.sessions.name` 部分),而不仅仅是简单的列名称。Nu 会接受列路径并输出表中相应的数据。

你可能已经注意到其他一些不同之处:我们没有一个数据表,而只有一个元素:即字符串 "jt"。Nu 既能处理数据表,也能处理字符串。字符串是使用 Nu 外部命令的一个重要部分。
你可能已经注意到其他一些不同之处:我们没有一个数据表,而只有一个元素:即字符串 `"jt"`。Nu 既能处理数据表,也能处理字符串。字符串是使用 Nu 外部命令的一个重要部分。

让我们看看字符串在 Nu 外部命令里面是如何工作的。我们以之前的例子为例,运行外部的`echo`命令(`^`告诉 Nu 不要使用内置的[`echo`](/commands/docs/echo.md)命令):
让我们看看字符串在 Nu 外部命令里面是如何工作的。我们以之前的例子为例,运行外部的 `echo` 命令(`^` 告诉 Nu 不要使用内置的 [`echo`](/commands/docs/echo.md) 命令):

@[code](@snippets/introduction/sys_get_external_echo_example.sh)

敏锐的读者可能会发现这看起来和我们之前的非常相似!确实如此,但有一个重要的区别:我们用前面的值调用了`^echo`。这允许我们把数据从 Nu 中传到外部命令`echo`(或者 Nu 之外的任何命令,比如`git`)。
敏锐的读者可能会发现这看起来和我们之前的非常相似!确实如此,但有一个重要的区别:我们用前面的值调用了 `^echo`。这允许我们把数据从 Nu 中传到外部命令 `echo`(或者 Nu 之外的任何命令,比如 `git`)。

### 获取帮助

任何 Nu 的内置命令的帮助文本都可以通过[`help`](/commands/docs/help.md)命令来找到。要查看所有命令,请运行`help commands`。你也可以通过执行`help -f <topic>`来搜索一个主题:
任何 Nu 的内置命令的帮助文本都可以通过 [`help`](/commands/docs/help.md) 命令来找到。要查看所有命令,请运行 `help commands` 。你也可以通过执行 `help -f <topic>` 来搜索一个主题:

@[code](@snippets/introduction/help_example.sh)
60 changes: 31 additions & 29 deletions zh-CN/book/installation.md
Original file line number Diff line number Diff line change
@@ -1,52 +1,58 @@
# 安装 Nu

有很多方法可以获取并使用 Nu。你可以从我们的[发布页面](https://github.com/nushell/nushell/releases)下载预编译的二进制文件,也可以 [使用你喜欢的软件包管理器](https://repology.org/project/nushell/versions),或者从源码构建。
有很多方法可以获取并使用 Nu。你可以从我们的 [发布页面](https://github.com/nushell/nushell/releases) 下载预编译的二进制文件,也可以 [使用你喜欢的软件包管理器](https://repology.org/project/nushell/versions),或者从源码构建。

Nushell 的主要二进制文件被命名为 `nu`(或 Windows 下的 `nu.exe`)。安装完成后你可以通过输入 `nu` 来启动它:

@[code](@snippets/installation/run_nu.sh)

## 预编译二进制包

Nu 二进制文件在 [GitHub 的 Release 页](https://github.com/nushell/nushell/releases)发布,适用于 Linux、macOS 和 Windows。只需下载并解压二进制文件,然后将其复制到你的系统`PATH`上的某个位置即可。
Nu 二进制文件在 [GitHub 的 Release 页](https://github.com/nushell/nushell/releases) 发布,适用于 Linux、macOS 和 Windows。只需下载并解压二进制文件,然后将其复制到你的系统 `PATH` 上的某个位置即可。

## 软件包管理器

Nu 可以通过几个软件包管理器获得:

[![打包状态](https://repology.org/badge/vertical-allrepos/nushell.svg)](https://repology.org/project/nushell/versions)

对于 macOS 和 Linux,[Homebrew](https://brew.sh/)是一个流行的选择(`brew install nushell`)。
对于 macOS 和 Linux,[Homebrew](https://brew.sh/) 是一个流行的选择(`brew install nushell`)。

对于 Windows 用户:

- [Winget](https://docs.microsoft.com/en-us/windows/package-manager/winget/) (`winget install nushell`)
- [Chocolatey](https://chocolatey.org/) (`choco install nushell`)
- [Scoop](https://scoop.sh/) (`scoop install nu`)

Nushell 的主要二进制文件被命名为 `nu`(或 Windows 下的 `nu.exe`)。安装完成后你可以通过输入 `nu` 来启动它。
跨平台安装:

- [npm](https://www.npmjs.com/) (`npm install -g nushell` 请注意,以这种方式安装,nu 插件是不包含在内的)

## 从源码构建

你也可以从源代码构建`Nu`。首先,你需要设置 Rust 工具链和它的依赖项。
你也可以从源代码构建 `Nu`。首先,你需要设置 Rust 工具链和它的依赖项。

### 安装编译器套件

为了使 Rust 能够正常工作,你需要在你的系统上安装一个兼容的编译器套件。以下是推荐的编译器套件:

- Linux:GCC 或 Clang
- macOS:Clang (安装 Xcode)
- macOS:Clang安装 Xcode
- Windows:MSVC(安装 [Visual Studio](https://visualstudio.microsoft.com/vs/community/)[Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022))
- 请确保安装 "用 C++进行桌面开发" 相关包
- 任何 Visual Studio 版本都可以(社区版是免费的)
- 请确保安装 "用 C++ 进行桌面开发" 相关包
- 任何 Visual Studio 版本都可以社区版是免费的

### 安装 Rust

如果我们的系统中还没有 Rust,最好的方法是通过 [rustup](https://rustup.rs/) 来安装它。Rustup 是一种管理 Rust 安装的工具,可以管理使用不同的 Rust 版本。

Nu 目前需要 **最新(1.60 或更高)的稳定** 版本的 Rust。最好的方法是让`rustup`为你找到正确的版本。当你第一次打开`rustup`时,它会询问你想安装哪个版本的 Rust:
Nu 目前需要 **最新(1.66.1 或更高)的稳定** 版本的 Rust。最好的方法是让 `rustup` 为你找到正确的版本。当你第一次打开 `rustup` 时,它会询问你想安装哪个版本的 Rust:

@[code](@snippets/installation/rustup_choose_rust_version.sh)

一旦我们准备好了,我们就按 `1`,然后回车。

如果你不愿意通过`rustup`来安装 Rust,你也可以通过其他方法来安装它(比如从 Linux 发行版的软件包中)。只要确保安装 1.60 或更高版本的 Rust 即可。
如果你不愿意通过 `rustup` 来安装 Rust,你也可以通过其他方法来安装它(比如从 Linux 发行版的软件包中)。只要确保安装 1.66.1 或更高版本的 Rust 即可。

### 依赖

Expand All @@ -72,22 +78,18 @@ Nu 目前需要 **最新(1.60 或更高)的稳定** 版本的 Rust。最好

@[code](@snippets/installation/macos_deps.sh)

### 使用 [crates.io](https://crates.io)进行构建
### 使用 [crates.io](https://crates.io) 进行构建

Nu 发行版会作为源码发布到流行的 Rust 包仓库 [crates.io](https://crates.io/)这使得使用 `cargo` 构建并安装最新的 Nu 版本变得很容易:
Nu 发行版会作为源码发布到流行的 Rust 包仓库 [crates.io](https://crates.io/)这使得使用 `cargo` 构建并安装最新的 Nu 版本变得很容易:

@[code](@snippets/installation/cargo_install_nu.sh)

如此即可! `cargo`工具将完成下载 Nu 及其源码依赖,构建并将其安装到 cargo bin 路径中,以便我们能够运行它。
如此即可`cargo` 工具将完成下载 Nu 及其源码依赖,构建并将其安装到 cargo bin 路径中,以便我们能够运行它。

如果你想安装更多的功能,你可以使用
如果你想要安装并支持 [dataframes](/zh-CN/book/dataframes.md) 功能,你可以在安装命令附上 `--features=dataframe`

@[code](@snippets/installation/cargo_install_nu_more_features.sh)

安装完毕后,我们可以使用 `nu` 命令运行 Nu:

@[code](@snippets/installation/run_nu.sh)

### 从 GitHub 仓库构建

我们也可以从 GitHub 上的最新源码构建自己的 Nu。这让我们可以立即获得最新的功能和错误修复。首先,克隆源码仓库:
Expand All @@ -98,31 +100,31 @@ Nu 发行版会作为源码发布到流行的 Rust 包仓库 [crates.io](https:/

@[code](@snippets/installation/build_nu_from_source.sh)

你也可以在**发布**模式下构建和运行 Nu:
你也可以在**发布**模式下构建和运行 Nu,以获得更多的编译优化

@[code](@snippets/installation/build_nu_from_source_release.sh)

熟悉 Rust 的人可能会问,如果 "run" 默认会构建,为什么我们还要做 "build""run" 这两个步骤?这是为了解决 Cargo 中新的 `default-run` 选项的缺陷,并确保所有插件都被构建,尽管这在将来可能不再需要。
熟悉 Rust 的人可能会问,如果 `run` 默认会构建,为什么我们还要做 `build``run` 这两个步骤?这是为了解决 Cargo 中新的 `default-run` 选项的缺陷,并确保所有插件都被构建,尽管这在将来可能不再需要。

## 设置登录 Shell (\*nix)
## 设置登录 Shell\*nix

**!!! Nu 仍在开发中,对于日常使用可能并不稳定。!!!**
:::danger
Nu 仍在开发中,对于日常使用可能并不稳定!
:::

要设置登录 Shell,你可以使用[`chsh`](https://linux.die.net/man/1/chsh)命令。
一些 Linux 发行版有一个位于`/etc/shells`的有效 Shell 列表,在 Nu 被列入白名单之前不允许改变 Shell。如果你没有更新`shells`文件,你可能会看到类似于下面的错误:
要设置登录 Shell,你可以使用 [`chsh`](https://linux.die.net/man/1/chsh) 命令。一些 Linux 发行版有一个位于 `/etc/shells` 的有效 Shell 列表,在 Nu 被列入白名单之前不允许改变 Shell。如果你没有更新 `shells` 文件,你可能会看到类似于下面的错误:

@[code](@snippets/installation/chsh_invalid_shell_error.sh)

你可以通过在`shells`文件中添加你的 Nu 二进制文件来把 Nu 添加到允许的 Shells 列表中。
添加的路径可以用`which nu`命令找到,通常是`$HOME/.cargo/bin/nu`
你可以通过在 `shells` 文件中添加你的 Nu 二进制文件来把 Nu 添加到允许的 Shells 列表中。添加的路径可以用 `which nu` 命令找到,通常是 `$HOME/.cargo/bin/nu`

## 设置默认的 Shell (Windows 终端)
## 设置默认的 ShellWindows 终端

如果你使用的是 [Windows Terminal](https://github.com/microsoft/terminal),你可以通过添加如下内容到你的终端设置`"profiles"`(JSON 文件)中来设置`nu`作为你的默认 Shell:
如果你使用的是 [Windows Terminal](https://github.com/microsoft/terminal),你可以通过添加如下内容到你的终端设置 `"profiles"`(JSON 文件)中来设置 `nu` 作为你的默认 Shell:

@[code](@snippets/installation/windows_terminal_default_shell.sh)

最后需要做的是将 `"defaultProfile"` 改为:
最后需要做的是将 `"defaultProfile"` 改为

@[code](@snippets/installation/windows_change_default_profile.sh)

Expand Down
Loading

0 comments on commit 6314e1c

Please sign in to comment.