
nushell v0.115.0
새로운 유형의 셸
Nushell
새로운 유형의 셸입니다.

Table of Contents
- Status
- Learning About Nu
- Installation
- Configuration
- Philosophy
- Goals
- Officially Supported By
- Contributing
- License
Status
이 프로젝트는 최소 기능 제품(minimum-viable-product) 수준의 품질에 도달했습니다. 많은 사람들이 일상적으로 사용하고 있지만, 일부 명령어에서는 불안정할 수 있습니다. Nu의 설계는 성숙해짐에 따라 변경될 수 있습니다.
Learning About Nu
Nushell 책은 Nushell 문서의 주요 출처입니다. 책에서 Nu 명령어 전체 목록을 찾을 수 있으며, 쿡북에서 Nu 사용에 대한 다양한 예제를 확인할 수 있습니다.
또한 Discord에서도 활동 중입니다. 와서 대화에 참여해 보세요!
Installation
Nu를 빠르게 설치하려면:
# Linux and macOS
brew install nushell
# Windows
winget install nushell
GitHub Action에서 Nu를 사용하려면 setup-nu에서 자세한 내용을 확인하세요.
자세한 설치 지침은 책의 설치 챕터에서 확인할 수 있습니다. Nu는 다양한 패키지 관리자를 통해 사용할 수 있습니다:
Nushell 팀이 적극적으로 지원하는 플랫폼에 대한 자세한 내용은 플랫폼 지원 정책을 참조하세요.
Configuration
기본 구성은 sample_config에서 확인할 수 있습니다. 이는 Nushell을 처음 시작할 때 얻게 되는 구성 파일들입니다.
Nushell을 실행하기 위한 모든 기본 구성을 설정합니다. 여기에서 필요에 따라 이 파일을 사용자 지정할 수 있습니다.
시스템에서 config.nu의 위치를 확인하려면 다음 명령어를 입력하세요.
$nu.config-path
Nushell 문서 전체는 책을 참조하세요.
Philosophy
Nu는 PowerShell, 함수형 프로그래밍 언어, 현대적인 CLI 도구와 같은 프로젝트에서 영감을 얻었습니다. 파일과 데이터를 텍스트의 원시 스트림으로 생각하는 대신, Nu는 각 입력을 구조를 가진 무언가로 봅니다. 예를 들어, 디렉토리 내용을 나열하면 각 행이 해당 디렉토리의 항목을 나타내는 행의 테이블을 반환합니다. 이러한 값들은 '파이프라인'이라고 하는 일련의 명령어를 통해 여러 단계로 파이프될 수 있습니다.
Pipelines
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의 중요한 철학입니다.
예를 들어, 위와 동일한 where를 사용하여 내장 ps 명령어로 실행 중인 프로세스 목록을 얻을 수 있습니다.
ps | where cpu > 0
# => ╭───┬───────┬───────────┬───────┬───────────┬───────────╮
# => │ # │ pid │ name │ cpu │ mem │ virtual │
# => ├───┼───────┼───────────┼───────┼───────────┼───────────┤
# => │ 0 │ 2240 │ Slack.exe │ 16.40 │ 178.3 MiB │ 232.6 MiB │
# => │ 1 │ 16948 │ Slack.exe │ 16.32 │ 205.0 MiB │ 197.9 MiB │
# => │ 2 │ 17700 │ nu.exe │ 3.77 │ 26.1 MiB │ 8.8 MiB │
# => ╰───┴───────┴───────────┴───────┴───────────┴───────────╯
Opening files
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
Plugins
Nu는 셸에 추가 기능을 제공하고 내장 명령어와 동일한 구조화된 데이터 모델을 따르는 플러그인을 지원합니다. crates/nu_plugins_* 디렉토리에 몇 가지 예제가 있습니다.
플러그인은 경로에 있는 바이너리이며 nu_plugin_* 명명 규칙을 따릅니다.
이 바이너리는 간단한 JSON-RPC 프로토콜을 통해 nu와 상호 작용하며, 명령어가 자신을 식별하고 구성을 전달하여 사용 가능하게 만듭니다.
플러그인이 필터인 경우 데이터 스트림이 한 번에 한 요소씩 전달되며, stdin/stdout을 통해 데이터를 다시 스트리밍할 수 있습니다.
플러그인이 싱크(sink)인 경우 최종 데이터의 전체 벡터가 주어지며 stdin/stdout을 자유롭게 사용할 수 있습니다.
awesome-nu 저장소에는 다양한 nu-플러그인이 나열되어 있으며, showcase 저장소에는 Nushell에 대해 작성된 유익한 블로그 게시물과 기술 주제를 다루는 비디오가 소개되어 있습니다.
Goals
Nu는 설계 철학을 구성하는 일련의 목표를 밀접하게 따릅니다. 기능이 추가될 때마다 이러한 목표에 부합하는지 확인합니다.
-
무엇보다도 Nu는 크로스 플랫폼입니다. 명령어와 기술은 모든 플랫폼에서 작동해야 하며 Nu는 Windows, macOS, Linux에 대한 일급 지원을 제공합니다.
-
Nu는 기존 플랫폼별 실행 파일과의 호환성을 보장합니다.
-
Nu의 워크플로우와 도구는 2022년(그 이후)의 현대 소프트웨어에서 기대되는 사용성을 갖추어야 합니다.
-
Nu는 데이터를 구조화된 것 또는 비구조화된 것으로 봅니다. PowerShell과 같은 구조화된 셸입니다.
-
마지막으로 Nu는 데이터를 함수형으로 봅니다. 변경(mutation) 대신 파이프라인은 가변 상태 없이 데이터를 로드, 변경, 저장하는 수단으로 작동합니다.
Officially Supported By
이 목록에 추가되려면 이슈 또는 PR을 제출해 주세요.
- zoxide
- starship
- oh-my-posh
- Couchbase Shell
- virtualenv
- atuin
- clap
- Dorothy
- Direnv
- x-cmd
- vfox
- Windmill
- Lacy
Contributing
자세한 내용은 Contributing을 참조하세요. 이미 기여해 주신 모든 분들께 감사드립니다!
License
이 프로젝트는 MIT 라이선스로 제공됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.