기본적으로 파일시스템은 프로그램 자체에 if문이나 case문으로 인자 ($1~10) 값을 처리하는 자동완성을 콘솔 밖에서 bash가 자동으로 잡아내지는 못한다.

그와 같은 응용 프로그램에 사용되는 자동완성 기능은 파일시스템의 '/etc/bash_completion'이 담당 하며 '/etc/bash_completion.d/~' 폴더를 들여다 보면 해당 프로그램에 대한 자동완성 기능이 있는 쉘 구축 파일들을 볼 수가 있다.

해당 파일들은 '/etc/bash_completion'가 처리 할 수 있는 함수들이 있으며 소크 코드의 형태를 이해하면 여러분도 직접 만든 응용 프로그램에 대한 자동완성 인자 값 추가 기능을 파일 시스템에 도입 할 수가 있다.

자 그렇다면 쇠뿔도 단 김에 빼라고 곧바로 소스코딩에 들어가 보자.

먼저 실행 가능한 $PATH에 실행 가능한 프로그램이 있어야 한다. 

그래서 간단한 shell 프로그램을 설계해 보자.

Source_File name : friend.sh

[Download]  

Type : bash

클립보드로 복사 → (본문 클릭)

무제



위는 인자 쉘에서 인자값을 인지하여 출력하는 간단한 대화형 출력 프로그램 이다.

완성 되었으면 간단하게 테스트를 해보자.

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 파일명을 'friend'로 바꾼다음 실행을 가능케 속성을 추가한다.


user@user-test:~$ mv friend.sh frined && chmod +x friend


user@user-test:~$  ./friend hi

hello


user@user-test:~$  ./friend bye

see you tomorrow~!


// 되었으면 $PATH로 복사 한다.


user@user-test:~$  sudo cp friend /usr/bin/


// 테스트 해본다.


user@user-test:~$ friend

what?


자 이제 간단한 인자값 인지 프로그램을 만들었으니 이제는 이 프로그램을 자동 완성 시켜주는 소스를 설계해 보자.


Source_File name :friend.bash_completion

[Download]

Type : bash

클립보드로 복사 → (본문 클릭)

무제


설계가 끝났으면 만든 파일을 '/etc/bash_completion.d' 로 복사하자.

-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


user@user-test:~$ sudo cp friend.bash_completion /etc/bash_completion.d



// 그리고 테스트 해보자.


// '/etc/bash_completion' 를 호출해주는 '~/.bashrc'를 로딩 한다.



user@user-test:~$ source ~/.bashrc



user@user-test:~$ friend '⇔'(탭키 연타)


hi    bye



> 자동 완성이 성공했다.



그리고 중요한 friend.bash_completion 파일의 소스코드 구조는 다음 그림과 같다. 



  

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린점, 혹은 틀린 부분이 있는 것 같다면 꼭 댓글로 알려 주시면 감사 하겠습니다.



+ Recent posts