Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

리눅스 Bash 명령줄에서 활용할 수 있는 5가지 표준 자동 완성 기능

리눅스에서는 별도의 설정 없이도 Bash가 기본적으로 명령줄 작업을 도와주는 다음과 같은 표준 자동 완성(completion) 기능을 제공합니다. Tab 키를 활용하는 이 기능들을 익혀두면 명령어 입력 속도와 정확도가 크게 향상됩니다.

  1. 변수명 자동 완성
  2. 사용자 이름 자동 완성
  3. 실행 파일 경로 자동 완성
  4. 파일명 및 디렉터리 자동 완성
  5. 호스트 이름 자동 완성

1. 변수명 자동 완성

터미널에서 $를 입력한 상태로 Tab 키를 두 번 누르면, 현재 셸에서 사용할 수 있는 모든 환경 변수와 셸 변수 목록이 아래와 같이 표시됩니다.

$ echo $[TAB][TAB]
$_                            $COMP_POINT                   $HOSTTYPE                     $PS1
$_backup_glob                 $COMPREPLY                    $IFS                          $PS2
$BASH                         $COMP_TYPE                    $inx                          $PS4
$BASH_ALIASES                 $COMP_WORDBREAKS              $LANG                         $PWD
$BASH_ARGC                    $COMP_WORDS                   $LANGUAGE                     $RANDOM
$BASH_ARGV                    $cur                          $LESSCLOSE                    $redir
$BASH_CMDS                    $cword                        $LESSOPEN                     $SECONDS
$BASH_COMMAND                 $DIRSTACK                     $LINENO                       $SHELL
$BASH_COMPLETION_COMPAT_DIR   $DISPLAY                      $LINES                        $SHELLOPTS
$BASH_LINENO                  $errx                         $LOGNAME                      $SHLVL
$BASHOPTS                     $EUID                         $LS_COLORS                    $split
$BASHPID                      $exclude                      $MACHTYPE                     $SUDO_COMMAND
$BASH_REMATCH                 $flag                         $MAIL                         $SUDO_GID
$BASH_SOURCE                  $FUNCNAME                     $MAILCHECK                    $SUDO_UID
$BASH_SUBSHELL                $GROUPS                       $OLDPWD                       $SUDO_USER
$BASH_VERSINFO                $__grub_script_check_program  $OPTERR                       $suffix
$BASH_VERSION                 $HISTCMD                      $OPTIND                       $TERM
$__colormgr_commandlist       $HISTCONTROL                  $OSTYPE                       $UID
$COLORTERM                    $HISTFILE                     $outx                         $USER
$COLUMNS                      $HISTFILESIZE                 $PATH                         $USERNAME
$COMP_CWORD                   $HISTSIZE                     $PIPESTATUS                   $words
$COMP_KEY                     $HOME                         $PPID                         $XAUTHORITY
$COMP_LINE                    $HOSTNAME                     $prev                         $_xspecs

2. 사용자 이름 자동 완성

틸드(~) 입력 후 Tab 키를 두 번 누르면, Bash가 자동으로 사용자 이름 자동 완성을 시작합니다.

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

참고: 이 기능은 홈 디렉터리에서 사용자 이름을 가져오는 것이 아니라, /etc/passwd 파일에 등록된 사용 가능한 모든 계정 이름을 기준으로 목록을 표시합니다.

3. 실행 파일 경로 자동 완성

명령을 실행하기 위해 경로를 입력할 때, 해당 실행 파일에 실행 권한이 있고 일치하는 항목이 하나뿐이라면 아래 예제처럼 자동으로 완성됩니다.

$ ls -l /etc/init.d/reboot
-rwxr-xr-x 1 root root 639 Jan 30  2013 /etc/init.d/reboot

$ /etc/init.d/reb[TAB][TAB]

$ /etc/init.d/reboot

반대로 일치하는 항목이 여러 개라면, 사용 가능한 명령 후보들이 화면에 표시되어 원하는 항목을 선택할 수 있습니다.

4. 파일명 및 디렉터리 자동 완성

이 자동 완성은 명령줄의 두 번째 인수 이후에 위치하는 파일명과 디렉터리 이름에 적용됩니다. 앞선 실행 파일 완성과 달리 실행 권한 같은 조건을 검사하지 않고, 현재 위치에서 사용할 수 있는 모든 파일과 디렉터리를 그대로 표시합니다.

$ ls
countfiles.sh  dir1  dir2  dir3 

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

$ cat c[TAB][TAB]

$ cat countfiles.sh

또한 표시해야 할 파일 수가 너무 많아 화면에 전체 후보를 나열하면 오히려 혼란스러운 경우에는, 다음과 같은 확인 메시지를 먼저 출력합니다.

$ ls -l /etc/
Display all 228 possibilities? (y or n)

팁: y 또는 n 대신 Enter 키나 Tab 키를 추가로 눌러 목록을 페이지 단위로 확인할 수도 있습니다.

5. 호스트 이름 자동 완성

원격 접속 대상이 되는 호스트 이름을 자동 완성하려면, @ 기호 입력 후 Tab 키를 두 번 누르면 됩니다. 아래와 같습니다.

$ ssh john@[TAB][TAB]
@dev-db  @fileserver @qa-server
@prod-db @localhost  @web-server

이 호스트 이름 자동 완성 기능은 @로 호스트를 지정할 수 있는 모든 명령어에서 활용할 수 있습니다. 예를 들어 파일을 복사할 때 사용하는 scp 명령에서도 아래와 같이 적용할 수 있습니다.

$ scp filename.txt john@[TAB][TAB]
@dev-db  @fileserver @qa-server
@prod-db @localhost  @web-server

참고: 이 기능은 /etc/hosts 파일에 등록된 호스트 이름들을 기준으로 목록을 가져옵니다. 따라서 자주 접속하는 서버를 /etc/hosts에 미리 등록해 두면 원격 작업 시 편리하게 활용할 수 있습니다.