본문 바로가기
리눅스

(번역) Command-line completion

by 다움위키 2025. 2. 10.

원문 보기: https://dawoum.duckdns.org/wiki/Command-line_completion

 

Original article: w:Command-line completion

명령-줄 완성 (탭 완성이라고도 함)은 명령-줄 인터프리터의 공통적인 기능으로, 이것에서 프로그램이 부분적으로 입력된 명령을 자동으로 채워줍니다.

명령-줄 인터프리터는 사용자에게 명령줄 인터페이스 (CLI)를 사용하여 명령 프롬프트에 명령을 입력함으로써 놓여있는 운영 시스템과 상호 작용할 수 있게 해주는 프로그램으로, 그래픽 사용자 인터페이스 (GUI)에서 마우스로 가리키고 클릭하는 것과는 대조적입니다. 명령-줄 완성은 사용자에게 명령, 프로그램, 또는 파일 이름의 처음 몇 글자를 입력하고, 항목의 나머지를 채우기 위해 완성 키 (통상적으로 Tab ↹)를 누르는 것을 허용합니다. 그런 다음 사용자는 명령을 실행하거나 파일을 열기 위해 Return 또는 ↵ Enter를 누릅니다.

명령-줄 완성은 이 기사와 함께 제공되는 애니메이션에서 알 수 있듯이 여러 가지 면에서 유용합니다. 공통적으로 접근하는 명령, 특히 긴 이름을 가진 명령은 키보드를 적게 눌러서 실행됩니다. 파일 이름이 길거나 철자가 어려운 명령은 처음 몇 글자를 입력하고 완성 키를 누름으로써 입력될 수 있으며, 완성 키는 명령이나 파일 이름을 완성합니다. 여러 개의 완성이 가능한 경우에서, 일부 명령-줄 인터프리터, 특히 유닉스 쉘은 해당 몇 글자로 시작하는 모든 가능한 완성을 나열할 것입니다. 사용자는 더 많은 문자를 입력하고 Tab ↹을 다시 눌러, 입력한 문자가 여전히 모호하면 새롭고 좁혀진 목록을 보거나, 그렇지 않으면 끝에 공백을 넣어 명령/파일 이름을 완성할 수 있습니다. 입력이 모호할 때 대안적인 완성의 형식은 모든 일치하는 결과를 순환합니다.

완성-가능한 요소에는 특정 인터프리터와 해당 구성에 따라 명령, 인수, 파일 이름, 및 기타 엔터티가 포함될 수 있습니다. 명령-줄 완성은 일반적으로 대화형 모드에서만 작동합니다. 즉, 그것은 완성이 모호하지 않더라도 스크립트배치 파일에서 부분적으로 입력된 명령을 완료하기 위해 호출될 수 없습니다. 탭 완성이라는 이름은 명령-줄 완성이 종종 탭 키를 눌러 호출된다는 사실에서 유래되었습니다.

History

탭 완성은 컴퓨팅 역사 초기에 등장했습니다; 최초의 예시 중 하나는 SDS 940에 대해 Berkeley Timesharing System에서 등장했으며, 여기서 입력된 문자열이 모호하면, 인터프리터가 아무것도 하지 않지만, 문자열이 모호하지 않으면, 사용자로부터 임의의 명령 없이 자동으로 완성합니다. 이 기능은 너무 빈번한 오타에는 잘 작동하지 않았고, 따라서 엇갈린 축복이었습니다. 이 기능은 중용한 변경 사항을 만든 Tenex의 개발자에 의해 모방되었습니다: Tenex는 사용자에 의해 이스케이프 키를 눌리지 않는 한 (따라서 그 이름), 인터프리터가 자동 완성을 시도하지 않는 "이스케이프 인식"을 사용했습니다. 도메인은 역시 Berkeley 시스템의 프로그램 이름에서 Tenex의 프로그램 이름과 파일 모두로 확장되었습니다. Tenex의 후손 TOPS-20은 명령-줄 완성을 명령 인터프리터에서 COMND JSYS 시스템 호출을 통해 운영 시스템으로 옮겨, 다른 사용자 응용 프로그램에서 사용할 수 있도록 했습니다. 그곳에서부터 그것은 유닉스에 의해 차용되었습니다.

Example

Firefoxintroduction-to-command-line-completion.html 파일을 열기 위해 다음과 같이 입력하십시오:

 firefox introduction-to-command-line-completion.html

이것은 입력하기 긴 명령입니다. 대신 우리는 명령-줄 완성을 사용할 수 있습니다.

Prompting completion

다음 예제는 Bash에서 명령-줄 완성이 어떻게 작동하는지 보여줍니다. 다른 명령줄 쉘은 약간 다르게 수행될 수 있습니다.

먼저 명령어의 처음 세 글자를 입력하십시오:

 fir

그런 다음 Tab ↹를 누르고 시스템에서 "fir"로 시작하는 명령은 "firefox"뿐이기 때문에, 그것은 다음과 같이 완성될 것입니다:

 firefox

그런-다음 파일 이름 입력을 시작하십시오:

 firefox i

그러나 이번에는 introduction-to-command-line-completion.html이 현재 디렉토리에서 "i"로 시작하는 유일한 파일이 아닙니다. 디렉토리에는 introduction-to-bash.htmlintroduction-to-firefox.html 파일도 있습니다. 시스템은 우리가 어떤 파일 이름을 입력할지 결정할 수 없지만, 파일이 "introduction-to-"로 시작해야 한다는 것을 알고 있으므로 명령은 다음과 같이 완성될 것입니다:

 firefox introduction-to-

이제 "c"를 입력하십시오:

 firefox introduction-to-c

Tab ↹ 키를 누른 후에 그것은 전체 파일 이름으로 완성될 것입니다:

 firefox introduction-to-command-line-completion.html

요역해서 다음과 같이 입력했습니다:

 firTab ↹iTab ↹cTab ↹

이것은 단 8번의 키 입력으로, 명령-줄 완성 기능을 사용하지 않았을 때 입력해야 했던 52번의 키 입력보다 상당히 적습니다.

Rotating completion

다음 예제는 명령-줄 완성이 Windows의 CMD에서 사용하는 것과 같은 순환 완성과 함께 작동하는 방식을 보여줍니다.

다음을 얻을 때까지 완성을 촉구하는 것과 같은 절차를 따릅니다:

 firefox i

Tab ↹ 키를 한 번 누르면, 다음과 같은 결과가 나옵니다:

 firefox introduction-to-bash.html

다시 Tab ↹ 키를 누르면 다음을 얻습니다:

 firefox introduction-to-command-line-completion.html

요약해서 다음과 같이 입력했습니다:

 firTab ↹iTab ↹Tab ↹

이것은 단지 7개의 키 입력으로, 프롬프팅-스타일 완성과 비슷합니다. 이것은 인터프리터가 어떤 가능성을 순환할지 알고 있다면 가장 잘 작동합니다.

Completion in different command line interfaces

  • Bash (대부분 Linux 배포판에서 기본 쉘) 및 ksh를 비롯한 유닉스 쉘은 고급 및 사용자 정의-가능한 완성 기능의 오랜 전통을 가지고 있습니다.
    • Bash 프로그래밍-가능 완성, complete와 compgen 명령은 2000년 2.04 베타 버전부터 사용 가능했고 적어도 경로명 및 파일명 완성 기능을 제공합니다.
    • KornShell 사용자에 대해, 파일 이름 완성은 EDITOR 변수의 값에 의존합니다. 만약 EDITOR가 vi로 설정되면, 이름의 일부를 입력하고, 그런-다음 Escape,\를 입력합니다. 만약 EDITOR가 Emacs로 설정되면, 이름의 일부를 입력하고, 그런-다음 Escape,Escape를 입력합니다.
    • Z shell (zsh)은 완전하게 프로그래밍-가능한 완성에 대한 지원을 개척하여, 사용자에게 쉘 자체와 관련 없는 다양한 명령의 매개변수를 쉘이 자동으로 완성하도록 허용하며, 이는 모든 알려진 스위치와 적절한 매개변수 유형의 정의로 쉘을 프라이밍함으로써 달성됩니다. 이것은 사용자에게 예를 들어 tar xzf Tab ↹를 입력하고 쉘이 실제 파일 시스템에서 타르된 gzip 아카이브만 완성하고 입력 매개변수와 호환되지 않는 파일은 건너뛸 수 있도록 허용합니다. 최신 zsh 설치에는 500개가 넘는 명령에 대한 완성 정의가 제공됩니다.
    • Tcsh는 Tab ↹를 사용하여 활성화되는 기본 파일, 명령. 및 변수 이름 완성을 제공합니다. 'complete' 내장 명령은 완전하게 프로그래밍-가능한 완성을 제공합니다. 소스 코드에는 완성 구문의 많은 예가 포함된 'complete.tcsh' 파일이 함께 제공됩니다.
  • Microsoft의 확장 가능한 명령 쉘, Windows PowerShell객체-지향 프로그래밍Microsoft .NET 프레임워크를 기반으로 하며, 기존 유닉스 쉘과 유사한 강력하고 사용자-정의-가능한 완성 기능을 제공합니다.
  • Windows NT-기반 시스템의 cmd.exe 명령 프로세서는 기본 완성을 지원합니다. 디렉토리 이름만 일치시키기 위해 별도의 키-바인딩을 사용할 수 있습니다.
  • cmd.exe /F:ON는 파일 및 디렉토리 이름 완성 문자 (기본적으로 ^F 및 ^D)를 활성화합니다. 자세한 내용에 대해  cmd.exe /?를 사용하십시오.
  • TweakUI는 파일 이름과 디렉토리 이름 완성에 사용되는 키를 구성하기 위해 사용될 수 있습니다.
  • MS-DOS 명령 프로세서 COMMAND.COM에는 명령줄 완성 기능이 없었습니다: 탭 키를 누르는 것은 커서가 앞으로만 이동합니다. 어쨌든, 4DOS, COMMAND.COMFreeDOS 버전, 또는 Enhanced DOSKEY.COM과 같은 MS-DOS에 대한 다양한 향상된 쉘에는 유닉스-스타일 탭 완성 기능이 있습니다.
  • Far Manager는 파일 관리 기능 외에도 Windows에 대한 명령 역사 및 줄 완성 기능을 제공합니다.

See also