Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

10 유용한 Linux Bash_Completion 전체 명령 예제(스테로이드에서 Bash 명령줄 완성)

Linux에서 명령을 입력하는 동안 TAB 키를 두 번 누르면 입력된 문자로 시작하는 사용 가능한 모든 명령이 나열됩니다.

이것은 새로운 것이 아니며 아마도 이미 이것에 대해 알고 있을 것입니다. 이 기능을 bash 완성이라고 합니다. 기본 파일 및 디렉토리 이름 완성은 기본적으로 bash 명령줄에서 사용할 수 있습니다.

그러나 우리는 이 bash 완료를 터보 차지할 수 있으며 complete 명령을 사용하여 다음 단계로 이동할 수 있습니다.

이 튜토리얼에서는 프로그램 가능한 완성을 사용하여 옵션과 명령의 인수에 자동 완성을 적용하는 방법을 설명합니다.

예를 들어 write 명령을 입력한 후 탭을 두 번 누르면 자동 완성이 사용자 목록을 제공합니다. 쓰기 작업을 수행합니다.

$ write [TAB][TAB]
bala raj
jason randy
john ritu
mayla thomas
nisha www-data

다음 예에서는 telnet 명령에 사용 가능한 호스트 이름을 표시합니다.

$ telnet [TAB][TAB]
localhost dev-db fileserver

터미널에서 프로그래밍 가능한 완성을 얻으려면 아래와 같이 /etc/bash_completion을 실행하기만 하면 됩니다.

# . /etc/bash_completion

/etc/bash.bashrc(ubuntu linux 13.04)에서 아래 줄의 주석 처리를 제거할 수도 있으므로 위의 명령을 명시적으로 실행할 필요가 없습니다.

<센터>
 enable bash completion in interactive shells
if ! shopt -oq posix; then
 if [ -f /usr/share/bash-completion/bash_completion ]; then
 . /usr/share/bash-completion/bash_completion
 elif [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
 fi
fi

이 행과 /etc/bash_completion 파일을 찾을 수 없는 경우 apt-get으로 bash_completion이라는 패키지를 설치하기만 하면 됩니다.

1. 기존 bash 완성 보기

프로그래밍 가능한 bash 완료를 활성화하면 bash 완료 세트가 정의됩니다. complete 명령은 bash 완료를 정의하는 데 사용됩니다.

기존 bash 완성을 보려면 아래와 같이 complete 명령어를 사용하세요.

 
complete -p | less

옵션 -p는 위의 예에서 선택 사항입니다.

2. Bash의 표준 완성 목록

Bash는 기본적으로 Linux 사용자를 위해 다음과 같은 표준 완성 기능을 제공합니다.

  1. 변수 이름 완성
  2. 사용자 이름 완성
  3. 호스트 이름 완성
  4. 경로 완성
  5. 파일 이름 완성

이전 bash 표준 완성 기사에서 이에 대해 논의했습니다.

3. 명령 획득 완료 정의

-c 명령으로 완료를 정의하여 사용 가능한 명령 목록을 인수로 가져옵니다. 다음 예에서 완료는 어떤 명령에 대해 정의되어 있으며,

$ complete -c which

$ which [TAB][TAB]
Display all 2116 possibilities? (y or n)

위와 같이 'y'를 누르면 모든 명령어가 나열됩니다.

4. 디렉토리 획득 완료 정의

옵션 d를 사용하면 디렉토리 이름만 인수로 가져오도록 완료를 정의할 수 있습니다. 다음 예에서 ls,

에 대한 완성 정의
$ ls
countfiles.sh dir1/ dir2/ dir3/

$ complete -d ls

$ ls [TAB][TAB]
dir1/ dir2/ dir3/

위에서 보았듯이 탭을 누르면 디렉토리만 표시됩니다.

5. 백그라운드 작업 이름을 얻기 위한 완료 정의

complete를 사용하면 명령에 대한 인수로 작업 이름을 가져올 수도 있습니다. 옵션 j는 아래와 같이 명령 작업에 인수로 작업 이름을 전달하는 데 사용됩니다.

$ jobs
[1]- Stopped cat
[2]+ Stopped sed 'p'

$ complete -j ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB][TAB]
cat sed

백그라운드 작업에 대해 이야기하면서 이러한 예를 사용하여 Linux 백그라운드 작업을 관리하는 방법도 알아야 합니다.

6. 접두사 및 접미사로 완성

완료는 추가할 원하는 접두사와 실제 완료와 함께 추가할 접미사로 정의할 수 있습니다. 다음 예에서는 list_job_attrib.sh에 대해 접두사와 접미사가 정의되어 있습니다.

$ jobs 
[1]+ Stopped cat

$ complete -P '">' -S '<"' ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB][TAB]

$ ./list_job_attrib.sh ">cat<"

7. 제외된 파일 이름 및 디렉토리 완성

스크립트가 실행을 완료하고 출력이 다음과 같이 출력 디렉토리에 기록되었다고 생각하십시오.

$ cd output/

$ ls
all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt
parser_mod.tmp extract.o

위의 경우 ls 명령으로 자동 완성을 위해 .tmp 및 .o 파일을 무시해야 하는 경우

$ export FIGNORE='.tmp:.o'

$ complete -f -d ls

$ cd output

$ ls [TAB][TAB]
all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt

FIGNORE는 파일 이름의 접미사를 포함하는 쉘 변수이며 자동 완성에서 제외됩니다.

8. 완료 값을 얻기 위해 IFS로 문자열 분할

단어 목록은 -W 옵션으로 언급할 수 있으며 이는 IFS 변수의 값으로 분할됩니다. 그런 다음 각 결과 단어가 확장되어 완성을 위해 표시됩니다.

$ export IFS=" "

$ complete -W "bubble quick" ./sort_numbers.sh

$ ./sort_numbers.sh [TAB][TAB]
bubble quick

위에서 언급했듯이 문자열을 IFS 구분 기호로 분할하면 단어가 확장되므로 아래와 같이 변수로 가질 수도 있습니다.

$ echo $SORT_TYPE1
bubble

$ echo $SORT_TYPE2
quick

$ complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort_numbers.sh
$ ./sort_numbers.sh [TAB][TAB]
bubble quick

9. 완성을 생성하는 고유한 함수 작성

완성을 정의하는 함수를 포함할 수 있습니다. -F 옵션을 사용하면 완료 명령에 함수 이름이 전달되고 완료를 생성하기 위해 실행됩니다. 예를 들어 함수는 아래와 같이 작성됩니다.

_parser_options()
{
 local curr_arg;

 curr_arg=${COMP_WORDS[COMP_CWORD]}

 COMPREPLY=( $(compgen -W '-i --incoming -o --outgoing -m --missed' -- $curr_arg ) );
}

위의 함수에서

  1. COMPREPLY :배열은 [TAB][TAB]을 누른 후 표시되는 완료 결과를 보유합니다.
  2. COMP_WORDS :명령줄에 입력되는 단어 배열
  3. COMP_CWORD :COMP_WORDS 배열에 대한 인덱스이며 명령줄에서 이 다른 위치 단어를 사용하여 액세스할 수 있습니다.
  4. compgen :-W는 가능한 완료를 보유하고 각 인수는 $current_arg를 기반으로 선택됩니다.

parser_option 파일에 있는 이 함수는 아래와 같이 소싱됩니다.

$ source parser_option

이 함수를 아래와 같이 파서 스크립트에 연결합니다.

$ complete -F _parser_options ./parser.pl

$ ./parser.pl [TAB][TAB]
-i --incoming -o --outgoing -m --missed

위에서 보았듯이 파서에 대한 옵션은 _parser_options() 함수에 의해 생성됩니다.

참고:/etc/bash_completion에서 프로그래밍 가능한 완성 기능을 더 많이 볼 수 있습니다.

10. 1차에서 생성되지 않는 2차 사양

정의된 완료 사양에 의해 생성된 일치 항목이 없으면 -o 옵션과 함께 언급된 완료를 위해 comp-option이 사용됩니다.

$ complete -F _count_files -o dirnames ./countfiles.sh

위와 같이 ./countfiles.sh 파일에 대한 _count_files 함수로 완성을 정의합니다. _count_files() 함수가 일치하는 항목을 생성하지 않으면 디렉터리 완성이 시도됩니다.

$ ls 
countfiles.sh dir1/ dir2/ dir3/

$./countfiles.sh [TAB][TAB]
dir1 dir2 dir3