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

스크립트

누셸에서는 누셸 언어로 스크립트를 작성하고 실행할 수 있습니다. 스크립트를 실행하려면 nu 명령줄 응용 프로그램에 인수로 전달할 수 있습니다.

nu myscript.nu

이렇게 하면 새 Nu 인스턴스에서 스크립트가 완료될 때까지 실행됩니다. source를 사용하여 현재 Nu 인스턴스 내에서 스크립트를 실행할 수도 있습니다.

source myscript.nu

예제 스크립트 파일을 살펴보겠습니다.

# myscript.nu
def greet [name] {
  ["hello" $name]
}

greet "world"

스크립트 파일은 사용자 지정 명령에 대한 정의와 사용자 지정 명령이 정의된 후 실행될 주 스크립트 자체를 정의합니다.

위 예제에서 greet는 먼저 누셸 인터프리터에 의해 정의됩니다. 이를 통해 나중에 이 정의를 호출할 수 있습니다. 위를 다음과 같이 작성할 수도 있습니다.

greet "world"

def greet [name] {
  ["hello" $name]
}

정의가 정의를 호출하는 스크립트 부분보다 먼저 와야 한다는 요구 사항은 없으므로 편안하게 느끼는 곳에 배치할 수 있습니다.

스크립트 처리 방법

스크립트에서 정의는 먼저 실행됩니다. 이를 통해 스크립트의 호출을 사용하여 정의를 호출할 수 있습니다.

정의가 실행된 후 스크립트 파일의 맨 위에서 시작하여 각 명령 그룹을 차례로 실행합니다.

스크립트 줄

누셸이 코드 줄을 어떻게 보는지 더 잘 이해하기 위해 예제 스크립트를 살펴보겠습니다.

a
b; c | d

이 스크립트가 실행되면 누셸은 먼저 a 명령을 완료될 때까지 실행하고 그 결과를 봅니다. 다음으로 누셸은 "세미콜론" 섹션의 규칙에 따라 b; c | d를 실행합니다.

스크립트 매개변수화

스크립트 파일에는 선택적으로 특수 "main" 명령이 포함될 수 있습니다. main은 다른 Nu 코드가 실행된 후에 실행되며 주로 스크립트에서 위치 매개변수 및 플래그를 허용하는 데 사용됩니다. 스크립트 이름 뒤에 스크립트에 인수를 전달할 수 있습니다(nu <script name> <script args>).

예시:

# myscript.nu
def main [x: int] {
  $x + 10
}
nu myscript.nu 100
# => 110

인수 유형 해석

기본적으로 스크립트에 제공된 인수는 Type::Any 유형으로 해석됩니다. 즉, 특정 데이터 유형에 국한되지 않고 스크립트 실행 중에 사용 가능한 데이터 유형 중 하나에 맞는 것으로 동적으로 해석될 수 있습니다.

이전 예제에서 main [x: int]는 인수 x가 정수 데이터 유형을 가져야 함을 나타냅니다. 그러나 인수가 명시적으로 유형이 지정되지 않은 경우 명백한 데이터 유형에 따라 구문 분석됩니다.

예시:

# implicit_type.nu
def main [x] {
  $"Hello ($x | describe) ($x)"
}

# explicit_type.nu
def main [x: string] {
  $"Hello ($x | describe) ($x)"
}
nu implicit_type.nu +1
# => Hello int 1

nu explicit_type.nu +1
# => Hello string +1

하위 명령

스크립트에는 예를 들어 run 또는 build와 같은 여러 하위 명령이 있을 수 있습니다.

# myscript.nu
def "main run" [] {
    print "running"
}

def "main build" [] {
    print "building"
}

def main [] {
    print "hello from myscript!"
}

그런 다음 호출할 때 스크립트의 하위 명령을 실행할 수 있습니다.

nu myscript.nu
# => hello from myscript!
nu myscript.nu build
# => building
nu myscript.nu run
# => running

모듈과 달리, main은 표시되기 위해 내보낼 필요가 없습니다. 위 예제에서 main 명령은 export def가 아니지만 nu myscript.nu를 실행할 때 여전히 실행되었습니다. myscript.nu를 스크립트로 실행하는 대신 use myscript.nu를 실행하여 myscript를 모듈로 사용했다면 myscript가 내보내지지 않았기 때문에 myscript 명령을 실행하려고 해도 작동하지 않습니다.

main의 하위 명령이 올바르게 노출되려면 main 명령을 정의해야 한다는 점에 유의하는 것이 중요합니다. 예를 들어, run 및 build 하위 명령만 정의했다면 스크립트를 실행할 때 액세스할 수 없습니다.

# myscript.nu
def "main run" [] {
    print "running"
}

def "main build" [] {
    print "building"
}
nu myscript.nu build
nu myscript.nu run

이것은 현재 스크립트가 처리되는 방식의 한계입니다. 스크립트에 하위 명령만 있는 경우 빈 main을 추가하여 다음과 같이 하위 명령을 노출할 수 있습니다.

def main [] {}

Shebangs (#!)

Linux 및 macOS에서는 선택적으로 shebang을 사용하여 OS에 파일이 Nu에 의해 해석되어야 함을 알릴 수 있습니다. 예를 들어, myscript라는 파일에 다음 내용이 있는 경우:

#!/usr/bin/env nu
"Hello World!"
./myscript
# => Hello World!

스크립트가 표준 입력에 액세스하려면 nu를 --stdin 플래그와 함께 호출해야 합니다.

#!/usr/bin/env -S nu --stdin
def main [] {
  echo $"stdin: ($in)"
}
echo "Hello World!" | ./myscript
# => stdin: Hello World!
GitHub에서 수정하기
Contributors: Taeyoon Kim, ImgBotApp, google-labs-jules[bot], deepthought
Prev
제어 흐름
Next
모듈