
nushell v0.115.0
새로운 유형의 셸
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는 다양한 패키지 관리자를 통해 사용할 수 있습니다:
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년(그리고 그 이후)의 현대 소프트웨어에서 기대되는 사용성을 갖추어야 합니다.