Nushell
문서
쿡북
블로그
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
문서
쿡북
블로그
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
  • 한국어
GitHub
  • 소개
  • 설치하기
    • 기본 셸
  • 시작하기
    • 빠른 둘러보기
    • 시스템 이동
    • 누셸 방식으로 생각하기
    • 누셸 치트 시트
  • Nu 기본
    • 데이터 유형
    • 데이터 로드
    • 파이프라인
    • 문자열 작업
    • 목록 작업
    • 레코드 작업
    • 테이블 작업
    • 구조화된 데이터 탐색 및 액세스
    • 특수 변수
  • Nu에서 프로그래밍하기
    • 사용자 지정 명령
    • 별칭
    • 연산자
    • 변수
    • 제어 흐름
    • 스크립트
    • 모듈
      • 모듈 사용하기
      • 모듈 만들기
    • 오버레이
    • 정렬
    • 누셸 코드 테스트
    • 모범 사례
  • 셸로서의 Nu
    • 구성
    • 환경
    • 표준 출력, 표준 오류 및 종료 코드
    • 시스템(외부) 명령 실행
    • 타사 프롬프트 구성 방법
    • 디렉터리 스택
    • Reedline, Nu의 줄 편집기
    • 사용자 지정 완성
    • 외부 명령
    • Nu의 색상 지정 및 테마 설정
    • 후크
    • 백그라운드 작업
  • Nu로 전환하기
    • Bash에서 오신 분들을 위해
    • CMD.EXE에서 오신 분들을 위해
    • 다른 셸 및 도메인 특정 언어의 Nu 맵
    • 명령형 언어의 Nu 맵
    • 함수형 언어의 Nu 맵
    • 누셸 연산자 맵
  • 디자인 노트
    • 누셸 코드가 실행되는 방법
  • (약간)고급 사용법
    • 표준 라이브러리 (미리보기)
    • 데이터프레임
    • 메타데이터
    • 나만의 오류 만들기
    • 병렬 처리
    • 플러그인
    • explore

오버레이

오버레이는 필요에 따라 활성화 및 비활성화할 수 있는 정의(사용자 지정 명령, 별칭, 환경 변수)의 "계층" 역할을 합니다. 파이썬과 같은 일부 언어에서 볼 수 있는 가상 환경과 유사합니다.

참고: 오버레이를 이해하려면 오버레이가 모듈 위에 구축되므로 먼저 모듈을 확인하십시오.

기본 사항

먼저, 누셸은 zero라는 하나의 기본 오버레이와 함께 제공됩니다. overlay list 명령으로 활성 오버레이를 검사할 수 있습니다. 거기에 나열된 기본 오버레이가 표시되어야 합니다.

새 오버레이를 만들려면 먼저 모듈이 필요합니다.

module spam {
    export def foo [] {
        "foo"
    }

    export alias bar = echo "bar"

    export-env {
        load-env { BAZ: "baz" }
    }
}

이 장 전체에서 이 모듈을 사용할 것이므로 overlay use spam을 볼 때마다 spam이 이 모듈을 참조한다고 가정하십시오.

팁

모듈은 모듈에 설명된 세 가지 방법 중 하나로 만들 수 있습니다.

  • "인라인" 모듈(이 예제에서 사용됨)
  • 파일
  • 디렉터리

오버레이를 만들려면 overlay use를 호출하십시오.

overlay use spam

foo
# => foo

bar
# => bar

$env.BAZ
# => baz

overlay list
# => ───┬──────
# =>  0 │ zero
# =>  1 │ spam
# => ───┴──────

모듈의 정의를 현재 범위로 가져오고 use 명령과 동일한 방식으로 export-env 블록을 평가했습니다(모듈 장 참조).

팁

다음 섹션에서는 > 프롬프트 앞에 마지막 활성 오버레이의 이름이 붙습니다. (spam)> some-command는 명령을 입력했을 때 spam 오버레이가 마지막 활성 오버레이임을 의미합니다.

오버레이 제거

더 이상 오버레이 정의가 필요하지 않으면 overlay hide를 호출하십시오.

(spam)> overlay hide spam

(zero)> foo
Error: Can't run executable...

(zero)> overlay list
───┬──────
 0 │ zero
───┴──────

오버레이도 범위가 지정됩니다. 추가된 오버레이는 범위가 끝나면 제거됩니다.

(zero)> do { overlay use spam; foo }  # 오버레이는 블록 내에서만 활성화됩니다.
foo

(zero)> overlay list
───┬──────
 0 │ zero
───┴──────

오버레이를 제거하는 마지막 방법은 인수가 없는 overlay hide를 호출하는 것입니다. 그러면 마지막 활성 오버레이가 제거됩니다.

오버레이는 기록 가능합니다

새로운 정의(명령, 별칭, 환경 변수)는 마지막 활성 오버레이에 기록됩니다.

(zero)> overlay use spam

(spam)> def eggs [] { "eggs" }

이제 eggs 명령은 spam 오버레이에 속합니다. 오버레이를 제거하면 더 이상 호출할 수 없습니다.

(spam)> overlay hide spam

(zero)> eggs
Error: Can't run executable...

하지만 다시 가져올 수 있습니다!

(zero)> overlay use spam

(spam)> eggs
eggs

오버레이는 추가한 내용을 기억하고 제거하더라도 해당 정보를 저장합니다. 이를 통해 다른 컨텍스트 간에 반복적으로 전환할 수 있습니다.

팁

오버레이를 추가한 후 사용자 지정 정의가 추가되지 않도록 하려면 사용자 지정 변경 사항을 기록하는 데만 사용되는 새 빈 오버레이를 만드는 것이 해결책이 될 수 있습니다.

(zero)> overlay use spam

(spam)> module scratchpad { }

(spam)> overlay use scratchpad

(scratchpad)> def eggs [] { "eggs" }

eggs 명령은 spam을 그대로 유지하면서 scratchpad에 추가됩니다.

더 간단하게 만들려면 overlay new 명령을 사용할 수 있습니다.

(zero)> overlay use spam

(spam)> overlay new scratchpad

(scratchpad)> def eggs [] { "eggs" }

접두사가 붙은 오버레이

overlay use 명령은 모듈에서 모든 명령과 별칭을 가져와 현재 네임스페이스에 직접 넣습니다. 그러나 모듈 이름 뒤에 하위 명령으로 유지하고 싶을 수 있습니다. 이것이 --prefix가 하는 일입니다.

(zero)> module spam {
    export def foo [] { "foo" }
}

(zero)> overlay use --prefix spam

(spam)> spam foo
foo

이는 환경 변수에는 적용되지 않습니다.

오버레이 이름 바꾸기

as 키워드를 사용하여 추가된 오버레이의 이름을 변경할 수 있습니다.

(zero)> module spam { export def foo [] { "foo" } }

(zero)> overlay use spam as eggs

(eggs)> foo
foo

(eggs)> overlay hide eggs

(zero)>

이는 가상 환경의 activate.nu와 같이 일반적인 스크립트 이름이 있지만 오버레이에 더 설명적인 이름을 원하는 경우에 유용할 수 있습니다.

정의 보존

때로는 오버레이를 제거하고 싶지만 다음 활성 오버레이에서 다시 정의할 필요 없이 추가한 모든 사용자 지정 정의를 유지하고 싶을 수 있습니다.

(zero)> overlay use spam

(spam)> def eggs [] { "eggs" }

(spam)> overlay hide --keep-custom spam

(zero)> eggs
eggs

--keep-custom 플래그는 바로 그 역할을 합니다.

--keep-env 플래그를 사용하여 오버레이 내에 정의된 환경 변수 목록을 유지하고 나머지는 제거할 수도 있습니다.

(zero)> module spam {
    export def foo [] { "foo" }
    export-env { $env.FOO = "foo" }
}

(zero)> overlay use spam

(spam)> overlay hide spam --keep-env [ FOO ]

(zero)> foo
Error: Can't run executable...

(zero)> $env.FOO
foo

오버레이 순서 지정

오버레이는 스택으로 배열됩니다. 여러 오버레이에 foo와 같은 동일한 정의가 포함된 경우 마지막 활성 오버레이의 정의가 우선합니다. 오버레이를 스택의 맨 위로 가져오려면 overlay use를 다시 호출할 수 있습니다.

(zero)> def foo [] { "foo-in-zero" }

(zero)> overlay use spam

(spam)> foo
foo

(spam)> overlay use zero

(zero)> foo
foo-in-zero

(zero)> overlay list
───┬──────
 0 │ spam
 1 │ zero
───┴──────

이제 zero 오버레이가 우선합니다.

GitHub에서 수정하기
Contributors: Taeyoon Kim, ImgBotApp, google-labs-jules[bot], deepthought
Prev
모듈
Next
정렬