zsh의 사전 명령 수정자 정보

zsh의 사전 명령 수정자 정보

배경

하지만zsh 문서(6.2장)에서는 다음과 같이 설명합니다.사전 명령 수정자-수행할 수 있지만 모든 유형 ( , builtin, command, 및 ) exec에 대한 예를 제공하지는 않습니다 .nocorrectnoglob

하나 있다유제사용자문의팬 콴. 그러나 이 질문은 모든 유형의 사전 명령 수정자에 대한 요청 예제를 강조하지 않습니다.


질문

각 사전 명령 수정자가 수행할 수 있는 작업에 대한 예를 제공할 수 있는 사람이 있습니까?

건배!

답변1

아래에는 각 수정자에 대한 예가 나와 있습니다. 및 와 같은 일부는 여기에 표시된 용도 외에도 exec다양한 용도로 사용됩니다 .command


  • 실행하는 데 사용되는 유틸리티는 -0번째 인수(명령 이름)의 첫 번째 문자로 대시를 삽입합니다. 명령 이름의 첫 번째 문자인 대시는 로그인 쉘로 초기화해야 함을 쉘에 알리는 일반적인 방법입니다.

    # Start the yash shell as a login shell:
    - yash
    

    이로 인해 쉘이 다른 시작 스크립트 세트를 읽기 시작할 수 있습니다. 예를 들어 의 경우 파일을 먼저 yash읽고 ~/.yash_profile, 그렇지 않으면 읽지 않습니다.

    -쉘이 의 첫 번째 문자로 시작되면 $0로그인 쉘이 됩니다. 로그인 쉘에는 일반적으로 l(소문자 ell) 도 있습니다 $-(비록 bash쉘은 이 규칙을 따르지 않는 것 같습니다).

    $ sh -c 'echo "$0"; echo "$-"'
    sh
    ch
    
    $ - sh -c 'echo "$0"; echo "$-"'
    -sh
    clh
    
  • 사용 builtin:

    builtin cd mydir
    

    cd예를 들어 , 기능의 일부로 작업 디렉토리를 실제로 변경하기 위해 호출되는 내장 변형인 셸 함수를 작성하려는 경우 cd유용할 수 있습니다 . 그냥 사용하면 cd함수에 대한 재귀 호출이 발생합니다.

    $ cd () { builtin cd "$@" && printf 'Now in %s\n' $PWD; }
    $ cd /tmp
    Now in /tmp
    
  • 명령 command표준 POSIX 명령예를 들어, 이는 사용자의 현재 시스템에 특정 유틸리티가 존재하는지 확인하는 데 사용될 수 있습니다 PATH.

    if ! command -v gsed >/dev/null 2>&1; then
        echo 'gsed is not available'
    fi
    

    command명령은 위에서 설명한 것과 유사한 방식으로 특정 유틸리티에 대한 별칭 및 함수 조회를 비활성화하는 데에도 일반적으로 사용됩니다 builtin.

  • 키워드 exec또한 표준, 완전히 사용할 수 있습니다바꾸다현재 쉘 및 다른 프로세스:

    # Replace the shell with bash
    exec bash
    

    이후 입력은 쉘 세션으로 대체 exit되었기 때문에 원래 쉘 세션으로 돌아가지 않습니다 bash.

    또한 이를 사용하여 exec현재 쉘의 표준 I/O 스트림에 대한 리디렉션을 설정할 수도 있습니다.

  • 현재 대화식 쉘 세션에 대해 철자 교정( setopt CORRECT)이 활성화된 경우 nocorrect다음을 사용하십시오.아니요명령 수정을 활성화합니다.

    일반적으로:

    $ setopt CORRECT
    $ seed
    zsh: correct 'seed' to 'sed' [nyae]? n
    zsh: command not found: seed
    

    그리고 nocorrect:

    $ setopt CORRECT
    $ nocorrect seed
    zsh: command not found: seed
    
  • noglob수정자는 현재 명령에 대해 와일드카드를 비활성화합니다.

    $ noglob echo *
    *
    

    noglob수정자가 없으면 *패턴이 확장되고 결과 단어(현재 디렉터리의 파일 이름)가 인수로 제공됩니다 echo.

    다른 셸에서는 와일드카드를 사용하여 일시적으로 껐다 set -f가 다시 켤 수 있습니다 set +f. 이것은 ~이 될 것이다표준 방식셸에서 파일 이름 글로빙을 비활성화합니다. 이 set -f명령은 쉘 이 zsh에뮬레이트되거나 .shksh

관련 정보