업데이트로 돌아가기
New releaseAug 30, 2026

nushell v0.115.0

새로운 유형의 셸

공유

Nushell

Crates.io Build Status Nightly Build Discord The Changelog #363 GitHub commit activity GitHub contributors

새로운 유형의 셸.

Example of nushell

목차

상태

이 프로젝트는 최소 기능 제품(MVP) 수준의 품질에 도달했습니다. 많은 사람들이 일상적으로 사용하고 있지만, 일부 명령은 불안정할 수 있습니다. Nu의 설계는 성숙해짐에 따라 변경될 수 있습니다.

Nu 알아보기

Nushell 책은 Nushell 문서의 주요 출처입니다. 책에서 Nu 명령의 전체 목록을 찾을 수 있으며, 쿡북에 Nu 사용 예제가 많이 있습니다.

우리는 Discord에서도 활동하고 있습니다. 함께 이야기해요!

설치

Nu를 빠르게 설치하려면:

# Linux and macOS
brew install nushell
# Windows
winget install nushell

GitHub Action에서 Nu를 사용하려면 자세한 내용은 setup-nu를 확인하세요.

자세한 설치 방법은 책의 설치 장에서 확인할 수 있습니다. Nu는 다양한 패키지 관리자를 통해 사용할 수 있습니다:

Packaging status

Nushell 팀이 적극적으로 지원하는 플랫폼에 대한 자세한 내용은 플랫폼 지원 정책을 참조하세요.

설정

기본 설정은 sample_config에서 찾을 수 있으며, 이는 Nushell을 처음 시작할 때 얻게 되는 설정 파일입니다.

이는 Nushell을 실행하기 위한 모든 기본 설정을 지정합니다. 여기에서 필요에 맞게 이 파일을 사용자 정의할 수 있습니다.

시스템에서 config.nu가 어디에 있는지 확인하려면 다음 명령을 입력하세요.

$nu.config-path

모든 Nushell 문서는 책을 참조하세요.

철학

Nu는 PowerShell, 함수형 프로그래밍 언어, 현대적인 CLI 도구와 같은 프로젝트에서 영감을 받았습니다. 파일과 데이터를 원시 텍스트 스트림으로 생각하는 대신, Nu는 각 입력을 구조를 가진 것으로 봅니다. 예를 들어, 디렉터리의 내용을 나열하면 각 행이 해당 디렉터리의 항목을 나타내는 테이블이 반환됩니다. 이러한 값은 '파이프라인'이라는 일련의 명령을 통해 일련의 단계를 거쳐 파이프될 수 있습니다.

파이프라인

Unix에서는 복잡한 명령을 여러 단계로 나누기 위해 명령 간에 파이프하는 것이 일반적입니다. Nu는 이를 한 단계 더 발전시켜 파이프라인 개념을 기반으로 구축되었습니다. Unix 철학에서처럼 Nu는 명령이 stdout으로 출력하고 stdin에서 읽을 수 있도록 합니다. 또한 명령은 구조화된 데이터를 출력할 수 있습니다(이를 세 번째 종류의 스트림으로 생각할 수 있습니다). 파이프라인에서 작동하는 명령은 다음 세 가지 범주 중 하나에 속합니다:

  • 스트림을 생성하는 명령 (예: ls)
  • 스트림을 필터링하는 명령 (예: where type == "dir")
  • 파이프라인의 출력을 소비하는 명령 (예: table)

명령은 파이프 기호(|)로 구분되어 왼쪽에서 오른쪽으로 흐르는 파이프라인을 나타냅니다.

ls | where type == "dir" | table
# => ╭────┬──────────┬──────┬─────────┬───────────────╮
# => │ #  │   name   │ type │  size   │   modified    │
# => ├────┼──────────┼──────┼─────────┼───────────────┤
# => │  0 │ .cargo   │ dir  │     0 B │ 9 minutes ago │
# => │  1 │ assets   │ dir  │     0 B │ 2 weeks ago   │
# => │  2 │ crates   │ dir  │ 4.0 KiB │ 2 weeks ago   │
# => │  3 │ docker   │ dir  │     0 B │ 2 weeks ago   │
# => │  4 │ docs     │ dir  │     0 B │ 2 weeks ago   │
# => │  5 │ images   │ dir  │     0 B │ 2 weeks ago   │
# => │  6 │ pkg_mgrs │ dir  │     0 B │ 2 weeks ago   │
# => │  7 │ samples  │ dir  │     0 B │ 2 weeks ago   │
# => │  8 │ src      │ dir  │ 4.0 KiB │ 2 weeks ago   │
# => │  9 │ target   │ dir  │     0 B │ a day ago     │
# => │ 10 │ tests    │ dir  │ 4.0 KiB │ 2 weeks ago   │
# => │ 11 │ wix      │ dir  │     0 B │ 2 weeks ago   │
# => ╰────┴──────────┴──────┴─────────┴───────────────╯

대부분의 경우 파이프라인의 출력을 보고 싶어 하므로 table이 가정됩니다. 위의 내용을 다음과 같이 작성할 수도 있습니다:

ls | where type == "dir"

동일한 명령을 사용하고 다르게 구성할 수 있는 것은 Nu의 중요한 철학입니다. 예를 들어, 내장 ps 명령을 사용하여 실행 중인 프로세스 목록을 가져올 수 있으며, 위와 동일한 where를 사용할 수 있습니다.

ps | where cpu > 0
# => ╭───┬───────┬──────┬───────────┬──────┬─────────┬───────┬────────────┬──────────╮
# => │ # │  pid  │ ppid │   name    │ user │ status  │  cpu  │  cpu_time  │   mem    │
# => ├───┼───────┼──────┼───────────┼──────┼─────────┼───────┼────────────┼──────────┤
# => │ 0 │  2240 │ 9872 │ Slack.exe │ dev  │ Running │ 16.40 │ 1min 12sec │ 178.3 MB │
# => │ 1 │ 16948 │ 9872 │ Slack.exe │ dev  │ Running │ 16.32 │      48sec │ 205.0 MB │
# => │ 2 │ 17700 │ 4632 │ nu.exe    │ dev  │ Running │  3.77 │       2sec │  26.1 MB │
# => ╰───┴───────┴──────┴───────────┴──────┴─────────┴───────┴────────────┴──────────╯

파일 열기

Nu는 파일과 URL 내용을 원시 텍스트 또는 구조화된 데이터(형식을 인식하는 경우)로 로드할 수 있습니다. 예를 들어, .toml 파일을 구조화된 데이터로 로드하고 탐색할 수 있습니다:

open Cargo.toml
# => ╭──────────────────┬────────────────────╮
# => │ bin              │ [table 1 row]      │
# => │ dependencies     │ {record 25 fields} │
# => │ dev-dependencies │ {record 8 fields}  │
# => │ features         │ {record 10 fields} │
# => │ package          │ {record 13 fields} │
# => │ patch            │ {record 1 field}   │
# => │ profile          │ {record 3 fields}  │
# => │ target           │ {record 3 fields}  │
# => │ workspace        │ {record 1 field}   │
# => ╰──────────────────┴────────────────────╯

이를 열 중 하나의 내용을 가져오는 명령으로 파이프할 수 있습니다:

open Cargo.toml | get package
# => ╭───────────────┬────────────────────────────────────╮
# => │ authors       │ [list 1 item]                      │
# => │ default-run   │ nu                                 │
# => │ description   │ A new type of shell                │
# => │ documentation │ https://www.nushell.sh/book/       │
# => │ edition       │ 2018                               │
# => │ exclude       │ [list 1 item]                      │
# => │ homepage      │ https://www.nushell.sh             │
# => │ license       │ MIT                                │
# => │ metadata      │ {record 1 field}                   │
# => │ name          │ nu                                 │
# => │ repository    │ https://github.com/nushell/nushell │
# => │ rust-version  │ 1.60                               │
# => │ version       │ 0.72.0                             │
# => ╰───────────────┴────────────────────────────────────╯

필요한 경우 더 깊이 파고들 수 있습니다:

open Cargo.toml | get package.version
# => 0.72.0

플러그인

Nu는 셸에 추가 기능을 제공하고 내장 명령이 사용하는 것과 동일한 구조화된 데이터 모델을 따르는 플러그인을 지원합니다. crates/nu_plugins_* 디렉터리에 몇 가지 예제가 있습니다.

플러그인은 경로에서 사용할 수 있고 nu_plugin_* 명명 규칙을 따르는 바이너리입니다. 이러한 바이너리는 명령이 자신을 식별하고 구성을 전달하여 사용할 수 있게 하는 간단한 JSON-RPC 프로토콜을 통해 nu와 상호 작용합니다. 플러그인이 필터인 경우 데이터가 한 번에 하나의 요소씩 스트리밍되고, stdin/stdout을 통해 데이터를 다시 스트리밍할 수 있습니다. 플러그인이 싱크인 경우 최종 데이터의 전체 벡터가 주어지고 stdin/stdout을 마음대로 사용할 수 있습니다.

awesome-nu 저장소에는 다양한 nu 플러그인이 나열되어 있으며, 쇼케이스 저장소는 Nushell에 대해 작성된 유익한 블로그 게시물과 기술 주제를 강조하는 비디오를 보여줍니다.

목표

Nu는 설계 철학을 구성하는 일련의 목표를 밀접하게 따릅니다. 기능이 추가될 때 이러한 목표에 비추어 검토됩니다.

  • 무엇보다도 Nu는 크로스 플랫폼입니다. 명령과 기술은 플랫폼 전반에서 작동해야 하며 Nu는 Windows, macOS, Linux에 대한 일급 지원을 제공합니다.

  • Nu는 기존 플랫폼별 실행 파일과의 호환성을 보장합니다.

  • Nu의 워크플로와 도구는 2022년(그리고 그 이후)의 현대 소프트웨어에서 기대되는 사용성을 갖추어야 합니다.

카테고리