Linux 에서 10 개의 유용 한 명령 행 보완 예

Linux 시스템 에서 명령 을 입력 하고 TAB 키 를 두 번 누 르 면 입력 문자 로 시작 할 수 있 는 모든 명령 이 표 시 됩 니 다.이것 은 결코 신선 하지 않다.아마 너 는 이미 알 고 있 을 것 이다.이 기능 은 명령 행 보완 bash completion 이 라 고 합 니 다.기본 적 인 상황 에서 bash 명령 행 은 파일 이나 디 렉 터 리 이름 을 자동 으로 보완 할 수 있 습 니 다.그러나,우 리 는 bash 명령 보완 기능 을 강화 하여,complete 명령 을 통 해 그것 을 새로운 높이 에 이 르 게 할 수 있다. 

이 튜 토리 얼 은 프로 그래 밍 가능 한 명령 행 완성 기능(programmable completion)을 어떻게 사용 하여 자동 완성 기능 을 옵션 이나 명령 행 인자 에 적용 하 는 지 설명 합 니 다. 
예 를 들 어 write 명령 을 입력 한 후에 TAB 버튼 을 두 번 누 르 면 자동 완성 기능 은 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완료 하면 됩 니 다:
 # . /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.기 존 명령 줄 완성 보기 
프로 그래 밍 가능 한 명령 행 보완 기능 을 사용 한 후에 이미 정 의 된 명령 보완 기능 이 있 습 니 다.complete 명령 은 명령 행 보완 을 정의 하 는 데 사 용 됩 니 다.
 기 존 명령 행 보완 을 보 려 면 complete 명령 을 사용 하 십시오.
 complete -p | less
위의 예 에서-p 옵션 은 선택 할 수 있 습 니 다. 
2.bash 의 표준 완성 기능 을 보 여 줍 니 다. 
기본 적 인 상황 에서 Bash 는 Linux 사용자 에 게 다음 과 같은 표준 보완 기능 을 제공 합 니 다.
 1.변수 완성
 2.사용자 이름 완성
 3.호스트 이름 완성
 4.경로 보완
 5.파일 이름 완성 
저희 가 그 전에...  bash 표준 보전 에서 이런 것들 을 토론 한 적 이 있다. 
3.명령 이름 완성 을 정의 합 니 다. 
-c 옵션 을 통 해 사용 가능 한 모든 명령 을 명령 의 보완 매개 변수 로 사용 할 수 있 습 니 다.다음 예 에서 which 명령 에 대한 보완(LCTT 번역 주:TAB 를 두 번 누 를 때 모든 명령 이름 을 보완 가능 한 매개 변수 로 표시 할 수 있 음)을 정의 합 니 다.

 $ 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/ 

위 와 같이 TAB 를 누 르 면 디 렉 터 리 이름 만 표 시 됩 니 다. 
5.배경 작업 이름 완성 정의 
보완 기능 도 작업 이름 을 보완 매개 변수 로 할 수 있다.옵션-j 는 명령 에 전달 하 는 매개 변수 로 작업 이름 을 정의 할 수 있 습 니 다.다음 과 같 습 니 다.

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

$ complete -j ./list_job_attrib.sh

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

백 스테이지 작업 에 대해 서 는 리 눅 스 백 스테이지 작업 의 예 를 참고 하여 백 스테이지 작업 을 어떻게 관리 하 는 지 알 수 있 습 니 다. 
6.접두사 와 접미사 가 있 는 완성 
보완 기능 은 실제 보완 내용 에 접두사 와 접 두 사 를 정의 할 수 있 습 니 다.아래 의 예 에서 listjob_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 옵션 을 사용 하여 함수 이름 을 complete 명령 에 전달 하고 함수 생 성 보완 내용 을 실행 합 니 다.예 를 들 어 함 수 는 다음 과 같다.

 _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 를 누 르 면 나타 나 는 결 과 를 제어 합 니 다.
 2.COMP_WORDS:이 배열 은 명령 행 이 입력 한 단 어 를 포함 합 니 다.
 3.COMP_CWORD : COMP_WORDS 배열 의 색인 을 사용 하여 명령 행 이 접근 할 수 있 는 단어 위 치 를 구분 합 니 다.
 4.copgen:-W 기반$currentarg 가능 한 보완 및 매개 변 수 를 제공 합 니 다. 
이 함 수 는 parseroption 파일 에서 source 명령 을 통 해 가 져 옵 니 다:
 $ source parser_option
이 함 수 를 parser.pl 스 크 립 트 와 연결 합 니 다:

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

위 와 같이 parser.pl 의 옵션 은 함수parser_options()가 생 성 했 습 니 다. 
알림:보기/etc/bashcompletion 은 더 많은 프로 그래 밍 가능 한 보완 함 수 를 알 아 보 려 고 합 니 다. 
10.첫 번 째 규칙 이 결 과 를 만 들 지 않 았 을 때 두 번 째 규칙 을 사용한다. 
정 의 된 완성 규칙 이 일치 하 는 것 을 만 들 지 않 았 을 때-o 옵션 을 사용 하여 완성 을 만 들 수 있 습 니 다.
 $ 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

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기