Command Aliases

프롬프트 상에서 자주 사용하는 명령문이나 복잡하고 긴 명령문에 별칭을 붙여서 사용할 수 있습니다. 별칭이 실행될 때는 설정한 명령문이 그대로 치환되어 실행됩니다. 설정할 경우 어떤 명령이나 함수 보다도 우선순위가 높습니다. 심지어 shell 키워드도 alias 하여 사용할 수 있습니다. alias 는 명령문을 alias 하는것으로 중간에 사용되는 인수를 alias 해서 사용할수 없고 명령 위치에서만 확장이 됩니다.

alias cp='cp -i'
alias mv='mv -i'
alias grep='grep --color=auto'
alias p4='ps axfo user,ppid,pid,pgid,sid,tty,stat,args'

alias geturl='python /some/cool/script.py'
$ geturl http://example.com/excitingstuff.jpg

# '|' ';' '{ }' '( )' 를 이용하여 여러 명령을 설정할 수도 있습니다.
alias name1='command1 | command2 | command3'
alias name2='command1; command2; command3'
alias name3='{ command1; command2; command3 ;}'
  • shell 프롬프트 상에서만 사용할 수 있습니다.
    non-interactive shell 인 script 파일에서는 기본적으로 alias 가 disable 됩니다.
    ( shopt -s expand_aliases 옵션으로 컨트롤할 수 있습니다. )

  • 설정한 alias 는 subshell 에서도 동일하게 적용됩니다.

  • child process 에서는 사용할 수 없습니다.
    ( 가령 vi 에디터에서 외부 명령을 실행할 때 사용할 수 없습니다. )

  • 함수를 정의할 때는 alias 가 자동으로 확장되어 정의됩니다.

$ alias ls
alias ls='ls -N -F --color=auto --time-style=long-iso'

$ myls() { ls -l ;}

$ declare -f myls
myls () 
{ 
    ls -N -F --color=auto --time-style=long-iso -l
}
  • BASH_ALIASES associative array 를 통해서 alias 된 명령을 구할 수 있습니다.
$ alias p3='ps fo user,ppid,pid,pgid,sid,tty,stat,args'

$ echo "${BASH_ALIASES[p3]}"
ps fo user,ppid,pid,pgid,sid,tty,stat,args
  • alias 에는 함수처럼 인수를 전달할 수 없습니다.

  • 설정한 alias 를 escape 하려면 이름 앞에 \ 를 붙이거나 quote 을 하면 됩니다. 또한 command, builtin 명령을 사용할 수도 있습니다.

  • 설정한 alias 를 삭제하려면 unalias 명령을 사용합니다.

Alias 는 shell 환경에서만 사용할 수 있다.

다음과 같은 경우 ls 명령이 alias 되어 있어도 shell 환경에서 실행되는 것이 아니므로 alias 적용이 되지 않습니다.

# ls 명령은 shell 환경이 아닌 find, xargs 명령에 의해 실행되는 것으로 alias 적용이 되지 않는다.

$ find -type f -exec ls -l {} \;

$ find -type f -print0 | xargs -0 -i ls -l {}

Alias 활용

alias 와 readline 함수인 alias-expand-line 를 이용하면 프롬프트 상에서 alias 를 확장시킬 수 있습니다. 주로 사용하는 명령문을 alias 로 등록하고 ~/.inputrc 파일에서 Alt-space 에 alias-expand-line 함수를 설정해보겠습니다.

alias 에 command history 도 사용된 다면 history-and-alias-expand-line 함수를 사용할 수 있습니다.

~/.inputrc 파일에 추가할 내용

# Alt-space 키에 alias-expand-line 함수 설정
"\e ": alias-expand-line

# F7 키를 누르면 vi 에디터로 aliases 파일을 수정
"\e[18~": "\C-k\C-uvi ~/.bashrc.d/aliases\C-m"

# Shift-F7 키를 누르면 source 명령으로 aliases 파일을 다시 읽어들임
"\e[18;2~": "\C-k\C-uunalias ${!BASH_ALIASES[@]}; source ~/.bashrc.d/aliases\C-m"

~/.bashrc.d/aliases 파일 예제

alias ps3='ps fo user,ppid,pid,pgid,sid,tty,stat,args'
alias ps4='ps axfo user,ppid,pid,pgid,sid,tty,stat,args'
alias t='type -a'
alias watch='watch -d -n1'
alias .awk='awk '\''{a[$1]} END {for (i in a) print i}'\'
alias .strace='{ timeout 10 strace -f -p 1234 ;} |& vi -'