티스토리 뷰
리눅스에서 application을 사용하면서 인자의 자동완성에 대해 궁금증이 생겼습니다. 예를들면 git의 경우 "git "을 타이핑하고 Tab키를 누르게 되면 아래처럼 입력 가능한 명령어들이 출력이 되는데요,
[oops@ ]$ git
add cherry-pick fetch log relink stage
am ci filter-branch lol remote stash
annotate clean format-patch merge repack status
apply clone fsck mergetool replace submodule
archive commit gc mv request-pull svn
bisect config get-tar-commit-id name-rev reset tag
blame credential-cache grep notes revert whatchanged
branch credential-store help pull rm
bundle describe imap-send push shortlog
checkout diff init rebase show
cherry difftool instaweb reflog show-branch
[oops@ ]$ git
직접 명령어를 만들어서, 인자 값이 검색되고 자동완성 되는 기능에 대해 공부해봤습니다. 일단 테스트를 위한 간단한 스크립트를 하나 추가합니다.
[oops@ ]$ cat oops
#!/bin/sh
if [ $1 = "one" ]; then
echo "one"
fi
if [ $1 = "two" ]; then
echo "two"
fi
[oops@ ]$
(첫번째 인자에 one이면 one을 출력하고, two면 two를 출력하는 쉘입니다. 내용은 크게 중요하지 않습니다.)
그리고 자동완성 기능을 제공하는 리눅스의 특정 폴더에 파일을 추가해줍니다. 이때 추가해주는 파일에는 자동완성 관련 된 단어들이 포함 됩니다.
[oops@ ]$ cat /etc/bash_completion.d/oops
#!bash
# my bash completion scripts
#
_test_fun()
{
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
COMPREPLY=( $( compgen -W 'one two' -- "$cur" ) )
}
complete -F _test_fun oops
위와 같이 추가해주고요, oops 스크립트를 테스트 해봅니다. oops를 입력하고 Tab키를 누릅니다.
[oops@ ]$ oops
one two
[oops@ ]$ oops one
one
[oops@ ]$
정상적으로 동작하는것을 확인 할 수 있습니다. 중요한 포인트는 /etc/bash_completion.d/oops 파일의 내용의 내용입니다. 더 전문적인 내용을 추가하기 위해서는 bash문법을 공부해봐야겠습니다.
Update
아래는 conda에서 자주 사용하는 몇 가지를 bash_completion 해본 예제입니다. 함께 참고해서 보시면 좋습니다.
https://gist.github.com/jybaek/0611faa6816f5438c524f241af8897a8
'개발 > Linux' 카테고리의 다른 글
mariaDB 설치 (0) | 2015.02.09 |
---|---|
OpenSSL취약점 관련, -DOPENSSL_NO_HEARTBEATS 사용 (0) | 2014.04.11 |
리눅스 콘솔 글씨 색상 지정 (0) | 2013.09.16 |
applicatioin에서 call trace 출력 (message) (0) | 2013.09.11 |
특정 폴더 감시 inotify_add_watch() (0) | 2013.07.23 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday