Today
-
Yesterday
-
Total
-
  • Bash에서 사용자 자동 완성 기능 개선하기
    Practice/Mac, Linux 2019.04.04 18:35

    Ubuntu Linux의 bash의 자동 완성은 /etc/bash_completion.d/ 아래 위치한다.
    rustup의 자동 완성 기능을 활성화 하는 방법에서 여기에 설치하도록 안내하고 있다.[각주:1]

    rustup completions bash > /etc/bash_completion.d/rustup.bash-completion

    위 방법은 일반적인 Rust 설치 권한 이상을 요구하는 문제가 있다.
    Rust를 대개 개인의 홈디렉토리에 설치한다.[각주:2]
    즉, 관리자 권한이 없어도 설치하고 사용할 수 있다.
    반면, /etc/bash_completion.d/ 디렉토리는 관리자 권한을 요구한다.[각주:3]

     

    간단한 해결 방법으로는, ~/.bash_completion 파일에 추가하는 방법이 있다.
    개인 명령어의 모든 자동 완성을 이 파일에 담는다.
    당연히, 관리의 문제를 예상할 수 있다.
    예를 들면, rustup을 갱신한 후에 ~/.bash_completion 파일에서 해당 부분을 손수 편집해야 한다.

     

    더 나은 방법으로, 개인에게도 /etc/bash_completion.d/ 디렉토리의 방식을 적용해보자.
    우선 ~/.bash_completion 파일에 아래의 내용을 담는다.

    # -*- shell-script -*-
    
    # source user completion directory definitions
    user_dir=${BASH_COMPLETION_USER_DIR:-~/.bash_completion.d}
    if [[ -d $user_dir && -r $user_dir && -x $user_dir ]]; then
        for i in "$user_dir"/*; do
            [[ ${i##*/} != @($_backup_glob|Makefile*|$_blacklist_glob) \
                && -f $i && -r $i ]] && . "$i"
        done
    fi
    unset user_dir i _blacklist_glob

    이제 자동 완성 파일을 ~/.bash_completion.d/ 디렉토리에 저장한다.
    아까 rustup의 예를 들면, 다음과 같다.

    rustup completions bash > ~/.bash_completion.d/rustup.bash-completion

     

    CentOS Linux의 bash 자동 완성

    CentOS에서는 bash-completion, bash-completion-extras를 설치해야 한다.

    sudo yum install bash-completion bash-completion-extras

    ~/.bashrc 파일에 아래 내용을 추가한다.

    # enable programmable completion features (you don't need to enable
    # this, if it's already enabled in /etc/bashrc and /etc/profile
    # sources /etc/bashrc).
    if ! shopt -oq posix; then
        if [ -f /etc/profile.d/bash_completion.sh ]; then
            . /etc/profile.d/bash_completion.sh
        fi
    fi

    이후 내용은 Ubuntu Linux의 그것과 같다.

     

    Mac의 bash 자동 완성

    Mac의 bash에서 자동 완성은 brew로 bash-completion를 설치해야 한다.

    brew install bash-completion

    설치 후에 ~/.bash_profile 파일에 아래 내용을 추가한다.

    # Enable programmable completion features
    if ! shopt -oq posix; then
        if [ -f /usr/local/etc/profile.d/bash_completion.sh ]; then
            . /usr/local/etc/profile.d/bash_completion.sh
        elif [ -f ~/.bash_completion ]; then
            . ~/.bash_completion
        fi
    fi

    이후 내용은 Ubuntu Linux의 그것과 같다.

    1. https://github.com/rust-lang/rustup.rs [본문으로]
    2. 요즘은 컴파일러나 의존 라이브러리, 개발 도구들을 개인 홈디렉토리나 프로젝트 디렉토리에 설치한다. [본문으로]
    3. 또 한가지 사소한 문제는 Rust를 설치하지 않은 사용자에게도 rustup 자동 완성이 활성화된다. 큰 문제는 아니지만, 나는 부족하지도 넘치지도 않는 딱 떨어지는 것을 좋아한다. 그렇지 않으면 몹시 불편하다. [본문으로]

    댓글 0

Designed by Tistory.