Bash 셸의 동작을 세밀하게 조정하기 위해 `shopt` 명령어를 활용하면 50가지가 넘는 다양한 설정을 제어할 수 있습니다. 지금부터 리눅스 시스템을 사용자의 취향에 맞게 설정하는 방법을 알아보겠습니다.
`shopt` 내장 명령어
`shopt` 명령어는 모든 Bash 셸 버전에 기본적으로 포함되어 있기 때문에 별도로 설치할 필요가 없습니다. `shopt`에서 이용 가능한 옵션의 수는 시간이 지남에 따라 꾸준히 증가해 왔습니다. 따라서 Bash 버전이 오래될수록 사용 가능한 옵션 목록은 더 짧아집니다.
만약 여러분의 컴퓨터에서 `shopt` 명령어가 작동하지 않는 것처럼 보인다면, Bash 매뉴얼 페이지 항목을 확인하여 해당 버전에서 `shopt`의 옵션들을 사용할 수 있는지 확인해야 합니다.
이 글에서는 `shopt`의 모든 옵션을 다룰 것입니다. 각 옵션의 사용법을 설명하고 예시를 제공할 것입니다. 추가로 GNU Bash 참조 매뉴얼을 참고하여 어떤 옵션이 유용하고 매력적인지 파악해보세요.
몇몇 `shopt` 옵션들은 기본적으로 활성화되어 있으며, Bash의 기본적인 동작을 형성합니다. `shopt` 옵션은 Bash에서 일시적인 변경을 가능하게 합니다. 셸을 닫으면 Bash는 초기 설정 상태로 돌아갑니다.
하지만 Bash 셸을 시작할 때마다 수정된 동작을 사용하려면, 변경 사항을 영구적으로 적용해야 합니다.
`shopt` 옵션들
총 53개의 `shopt` 옵션이 있습니다. 옵션 없이 `shopt` 명령어를 실행하면 이러한 옵션들이 나열됩니다. 명령어의 출력을 `wc` 명령어로 파이프하면 줄, 단어, 문자 수를 셀 수 있습니다. 각 `shopt` 옵션은 별도의 줄에 표시되므로, 라인 수는 곧 옵션의 개수를 의미합니다.
아래 명령어를 입력해 보세요:
shopt | wc
모든 옵션을 한눈에 보려면, 출력을 `column` 명령어로 파이프하여 옵션 이름을 열 형식으로 표시하거나, `less` 명령어로 파이프할 수 있습니다.
아래 명령어를 입력해 보세요:
shopt | column
리눅스 매뉴얼에서 `shopt` 찾기
`shopt`와 그 옵션에 대한 설명은 리눅스 매뉴얼의 Bash 섹션에 있습니다. Bash 섹션은 6,000줄이 넘습니다. 스크롤을 많이 하여 `shopt`에 대한 설명을 찾거나, 매뉴얼 내에서 검색 기능을 사용할 수 있습니다.
Bash 매뉴얼을 열려면 다음 명령어를 입력합니다.
man bash
매뉴얼에서 `/`를 누르면 검색을 시작할 수 있습니다. 아래 명령어를 입력하고 Enter 키를 누릅니다.
assoc_expand_once
`shopt` 옵션에 대한 설명이 man 창에 나타납니다.
옵션 설정 및 해제
`shopt` 옵션을 설정하거나 해제하려면 다음 명령어를 사용합니다.
`-s`: 옵션을 설정 또는 활성화합니다.
`-u`: 옵션을 해제 또는 비활성화합니다.
몇몇 옵션들은 기본적으로 활성화되어 있기 때문에, 어떤 옵션이 켜져 있는지 확인하는 것이 좋습니다. 옵션 이름을 명시하지 않고 `-s` 또는 `-u` 옵션을 사용하면 활성화 및 비활성화된 옵션 목록을 볼 수 있습니다.
아래 명령어를 입력해 보세요:
shopt -s
shopt -u | column
옵션 이름과 함께 `-s` 또는 `-u` 명령어를 사용하지 않고 `shopt` 명령어를 실행하면 각 옵션의 활성화 여부를 확인할 수 있습니다.
예를 들어, `histverify` 옵션의 설정을 확인하려면 다음 명령어를 입력하세요.
shopt histverify
`histverify` 옵션을 활성화하려면 다음 명령어를 입력하세요.
shopt -s histverify
다시 한번 설정을 확인하려면 다음 명령어를 입력하세요.
shopt histverify
`histverify` 옵션은 `history` 명령어의 동작 방식을 변경합니다. 일반적으로, `!245`와 같이 숫자로 명령어를 참조하여 히스토리에서 명령어를 반복 실행하도록 요청하면, 해당 명령어가 즉시 실행됩니다.
만약 명령어를 실행하기 전에 검토하거나 편집하고 싶다면, 다음 명령어를 사용하여 `shopt histverify` 옵션을 활성화해야 합니다.
!245
이제 명령어가 검색되어 명령줄에 표시됩니다. 필요에 따라 삭제, 편집 또는 실행할 수 있습니다.
`autocd` 옵션
`autocd` 옵션이 활성화된 상태에서 명령줄에 디렉토리 이름을 입력하고 Enter 키를 누르면, Bash는 자동으로 `cd` 명령어를 입력한 것처럼 처리합니다.
`autocd` 옵션을 활성화하려면 다음 명령어를 입력하세요.
shopt -s autocd
이제 디렉토리 이름을 입력해 보세요.
Documents
`cdspell` 옵션
`cdspell` 옵션이 활성화되면 Bash는 디렉토리 이름의 간단한 철자 오류와 오타를 자동으로 수정합니다.
`cdspell` 옵션을 설정하려면 다음 명령어를 입력하세요.
shopt -s cdspell
초기 대문자가 있어야 할 소문자 디렉토리로 이동하려면 다음 명령어를 입력해 보세요.
cd documents
다음으로 이름에 추가적인 “t”가 포함된 디렉토리 이름을 시도해 보세요.
cd ../Picttures
Bash는 철자 오류에도 불구하고 각 디렉토리로 이동합니다.
`xpg_echo` 옵션
`xpg_echo` 옵션이 활성화되면, `echo` 명령어는 개행 문자의 경우 `\n`, 가로 탭의 경우 `\t`와 같은 이스케이프 문자를 해석합니다.
먼저 옵션이 설정되어 있는지 확인하세요.
shopt -s xpg_echo
이제 `echo` 명령어에 `\n`을 포함한 문자열을 전달하세요.
echo "This is line one\nThis is line two"
이스케이프된 개행 문자가 출력에서 줄 바꿈을 강제합니다.
이는 `echo` 명령어의 `-e` 옵션(이스케이프 해석 가능)과 동일하지만, `xpg_echo`를 사용하면 이 동작이 기본적으로 적용됩니다.
`dotglob` 옵션
`dotglob` 옵션은 주의해서 사용해야 합니다. 이 옵션은 마침표(.)로 시작하는 파일 및 디렉토리를 이름 확장 또는 “글로빙”에 포함시킵니다. 이러한 파일 및 디렉토리는 “숨김 파일” 또는 “숨김 디렉토리”라고 불립니다. `dotglob` 옵션은 이름 시작 부분의 점을 무시합니다.
먼저 “geek”로 끝나는 파일이나 디렉토리를 검색해 보세요.
ls *geek
하나의 파일이 검색되어 나열됩니다. 이제 `dotglob` 옵션을 활성화합니다.
shopt -s dotglob
동일한 `ls` 명령어를 사용하여 “geek”로 끝나는 파일과 디렉토리를 검색합니다.
ls *geek
이번에는 두 개의 파일이 검색되어 나열되며, 그 중 하나는 숨김 파일입니다. `dotglob` 옵션을 활성화한 경우에는 `rm` 및 `mv` 명령어를 사용할 때 주의해야 합니다.
`nocaseglob` 옵션
`nocaseglob` 옵션은 `dotglob` 옵션과 유사하지만, `nocaseglob`을 사용하면 이름 확장 시 파일 및 디렉토리 이름의 대소문자 차이가 무시됩니다.
“how”로 시작하는 파일이나 디렉토리를 검색해 보세요.
ls how*
하나의 파일이 발견되어 나열됩니다. `nocaseglob` 옵션을 활성화합니다.
shopt -s nocaseglob
이제 `ls` 명령어를 반복해 보세요.
ls how*
두 개의 파일이 검색되었으며, 그 중 하나는 대문자를 포함하고 있습니다.
변경 사항을 영구적으로 만들기
변경 사항은 현재 Bash 셸을 닫을 때까지만 유지됩니다. 다른 셸 세션에서도 변경 사항을 영구적으로 만들려면 `.bashrc` 파일에 해당 설정을 추가해야 합니다.
홈 디렉토리에서 다음 명령어를 입력하여 그래픽 텍스트 편집기인 `gedit`으로 `.bashrc` 파일을 엽니다. (또는 원하는 편집기를 사용하도록 적절하게 변경하세요.)
gedit .bashrc
`gedit` 편집기가 `.bashrc` 파일을 로드한 상태로 열립니다. 이미 `shopt` 관련 설정이 있는 것을 확인할 수 있습니다.
여기에 사용자만의 `shopt` 옵션을 추가할 수 있습니다. 추가 후 변경 사항을 저장하고 편집기를 닫습니다. 이제 새 Bash 셸을 열 때마다 해당 옵션들이 설정됩니다.
탐색 가능한 범위 내에서의 옵션
`shopt` 명령어에 많은 옵션이 있는 것은 사실이지만, 모든 옵션을 한 번에 다루어야 할 필요는 없습니다. 옵션의 수가 너무 많아서 일부는 여러분의 관심사가 아닐 수도 있습니다.
예를 들어 Bash가 특정 구 버전과 호환되는 방식으로 작동하도록 하는 옵션들이 있습니다. 이는 특정 사용자에게는 유용할 수 있지만, 매우 특수한 경우에 해당합니다.
Bash 매뉴얼 페이지 또는 GNU Bash 참조 매뉴얼을 참고하여 어떤 옵션이 유용할지 확인하고 실험해 보세요. 특히 파일 및 디렉토리 이름이 확장되는 방식에 영향을 주는 옵션은 주의해야 합니다. 익숙해질 때까지 `ls`와 같은 안전한 명령어로 시도해 보세요.