macOS 터미널 bash 업그레이드 및 자동 완성 설정하기
macOS에 기본적으로 포함된 bash셸은 macOS 10.13.15(베타) 기준으로 3.2.x 버전입니다. 버전이 낮아도 필요한 기능들만 잘 지원되면 그냥 사용하겠지만, 한글 파일/폴더 이름에 대한 자동 완성이 제대로 되지 않는 문제점을 가지고 있습니다. 예를 들어, 터미널 밖에서 생성한 한글 파일/폴더 이름은 터미널에서 자동 완성으로 처리되지 않고, 오직 터미널(또는 셸) 내에서 생성한 한글 파일/폴더만 인식됩니다.
이를 패치하기 위해 여러 가지 방법을 시도해 보았으나 해결하지 못했고, 다른 방법이 있음에도 불구하고 계속해서 시간 낭비하는 것은 무의미한 것 같아 bash 3.2.x와의 신경질 나는 싸움은 그만두었습니다.
여하튼, 가장 간단하게 bash셸이 모든 한글 파일/폴더 이름을 인식하고 자동 완성 처리( TAB키) 되도록 하려면 bash 셸을 최신 버전으로 업그레이드하고 .inputrc파일(Readline Init File)에 자동 완성 설정을 추가해 주면 됩니다.
macOS에서 기본적으로 제공하지 않는 내부 패키지들은 Homebrew를 이용하면 쉽게 설치 및 관리할 수 있습니다. 최신 bash셸 역시 Homebrew를 이용하면 간단히 설치할 수 있습니다. 만약 Homebrew를 아직 설치하지 않았다면 터미널에서 다음 명령을 실행합니다.
Xcode Command Line Tools 가 설치되지 않았다면 먼저 다음 명령을 실행합니다.
1 |
xcode-select --install |
1 |
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
만약, 나중에 Homebrew를 언인스톨하고자 한다면, 제거하기 전에 Homebrew를 통하여 설치한 모든 패키지를 먼저 제거하는 것이 좋습니다. 일일이 설치된 파일 및 폴더를 제거하는 것은 시간 낭비가 될 수 있습니다.
1 2 |
brew remove --force $(brew list) --ignore-dependencies brew cleanup -s |
만약, 나중에 Homebrew를 언인스톨하고자 한다면, 제거하기 전에 Homebrew를 통하여 설치한 모든 패키지를 먼저 제거하는 것이 좋습니다. 일일이 설치된 파일 및 폴더를 제거하는 것은 시간 낭비가 될 수 있습니다.
1 |
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" |
1 |
brew install bash |
1 2 |
sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells' chsh -s /usr/local/bin/bash |
혹시 나중에 마음이 변하여 macOS 기본
bash셸 버전으로 돌아가고자 한다면 다음 명령을 실행합니다.
1 |
chsh -s /bin/bash |
/etc/shells에 추가된
/usr/local/bin/bash를 제거하려면
vim(또는
nano등)을 이용하여 파일을 수정해 줍니다.
1 |
sudo vi /etc/shells |
화살표 키로
/usr/local/bin/bash 줄로 이동한 후,
d를 2회 연속으로 누르고(줄 삭제),
:wq!를 차례로 입력합니다.
1 |
sudo bash -c 'printf "set completion-ignore-case on\nset show-all-if-ambiguous on\nTAB: menu-complete" >> ~/.inputrc' |
혹시 나중에 자동 완성 기능을 없애거나 초기 macOS 상태로 돌려놓고 싶다면 다음 명령을 차례로 실행합니다.
1 |
rm ~/.inputrc |
또는 키보드 입력에 대해 보다 세부적으로 설정하고자 한다면 [여기]를 참고하여 사용자 계정의 홈 폴더에 위치한
.inputrc 파일을 수정합니다. (만약 없다면 새로 생성합니다.)