7.7. Bash 셸 시작 파일

셸 프로그램(이하 로 칭함)인 /bin/bash는 실행할 환경을 만들기 위해 시작 파일 모음을 사용한다. 각 파일들은 특정한 용도를 가지며 로그인과 대화형 환경에 따라 다른 영향을 미친다. /etc 디렉토리의 파일은 전역 설정을 제공한다. 홈 디렉토리에 동일한 파일이 있다면, 전역 설정보다 우선시된다.

/bin/login을 통해 /etc/passwd 파일을 읽어 로그인에 성공하면 대화형 로그인 셸이 시작된다. 대화형 비로그인 셸은 명령줄에서 시작한다(예: [prompt]$/bin/bash). 비대화형 셸은 일반적으로 셸 스크립트가 실행 중일 때 나타난다. 스크립트를 처리하느라 명령들 간에 사용자의 입력을 기다리지 않기 때문에 비대화형이라 한다.

더 많은 정보는 info bashBash Startup Files and Interactive Shells절을 참고하라.

/etc/profile~/.bash_profile 파일들은 셸이 대화형 로그인 셸로 호출될 때 읽힌다.

아래에서 설명할 기본 /etc/profile은 자국어 지원에 필요한 몇 가지 환경 변수를 설정한다. 이들을 적절히 설정하면 다음과 같은 결과들을 얻을 수 있다:

아래 <ll>을 원하는 언어에 대한 2글자 코드로(예: en), <CC>를 해당 국가(예: GB)로 대체하라. <charmap>은 선택한 지역에 대한 표준 문자표로 대체해야 한다. @euro와 같은 선택적 옵션도 사용할 수 있다.

Glibc에서 지원하는 모든 국가/지역(locale)의 목록은 다음 명령을 실행하여 얻을 수 있다:

locale -a

문자표는 많은 별칭을 가질 수 있다. 예를 들어 ISO-8859-1iso8859-1 또는 iso88591이라고도 한다. 일부 응용 프로그램들은 이 다양한 동의어들을 올바르게 처리하지 못하므로(가령 UTF-8utf8이 아닌 UTF-8로 표기되어야 한다), 대부분의 경우 특정 국가/지역의 정식 명칭을 선택하는 것이 가장 안전하다. 정식 명칭을 알아내려면 다음 명령을 실행하라. 여기서 <locale name>은 선호하는 국가/지역에 대한 locale -a의 출력 결과이다(이 예시에서는 en_GB.iso88591).

LC_ALL=<locale name> locale charmap

en_GB.iso88591 로케일에 대해서, 위 명령은 다음과 같이 출력한다:

ISO-8859-1

이렇게 하면 최종 국가/지역 설정은 en_GB.ISO-8859-1이 된다. 위의 방법을 사용하여 찾은 로케일을 Bash 시작 파일에 추가하기 전에 먼저 테스트하는 것이 중요하다:

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

위의 명령은 언어 이름, 해당 국가에서 사용하는 문자 인코딩, 현지 통화 및 국제 전화 지역 번호 등을 출력한다. 위의 명령 중 하나가 아래 표시된 것과 유사한 메시지와 함께 실패한다면, 해당 로케일이 6장에서 설치되지 않았거나 Glibc의 기본 설치로부터 지원되지 않음을 의미한다.

locale: Cannot set LC_* to default locale: No such file or directory

이 경우 localedef 명령을 사용하여 원하는 로케일을 설치하거나, 다른 로케일을 선택해야 한다. 아래 지침은 Glibc로부터 이러한 오류 메시지가 뜨지 않는다고 가정한다.

LFS 이외의 일부 패키지들은 선택한 로케일을 지원하지 않을 수도 있다. X 라이브러리(X 윈도 시스템의 일부)가 한 가지 예로, 로케일이 내부 파일의 문자표 이름 중 하나와 정확히 일치하지 않으면 다음 오류 메시지를 출력한다:

Warning: locale not supported by Xlib, locale set to C

간혹 Xlib는 "iso88591" 대신 "ISO-8859-1"와 같이, 표준 대시와 함께 대문자로 표기된 문자표를 필요로 한다. 로케일 사양의 문자표 부분을 제거하여 적절한 사양을 찾을 수도 있다. 이는 두 로케일에서 locale charmap 명령을 실행하여 확인할 수 있다. 예를 들어, Xlib에서 이 로케일을 인식하도록 하려면 "de_DE.ISO-8859-15@euro"를 "de_DE@euro"로 변경해야 한다.

다른 패키지도 로케일 이름이 기대값에 알맞지 않을 경우 잘못 작동할 수 있다(그러나 오류 메시지를 반드시 출력하지는 않을 수도 있다). 이 경우, 다른 리눅스 배포판들에서 로케일을 지원하는 방법을 조사하면 몇 가지 유용한 정보를 얻을 수 있다.

올바르게 로케일을 설정했다면 /etc/profile 파일을 생성하라:

cat > /etc/profile << "EOF"
# Begin /etc/profile

export LANG=<ll>_<CC>.<charmap><@modifiers>

# End /etc/profile
EOF

C(기본값)와 en_US(미국 영어 사용자에게 권장되는 설정) 로케일은 서로 다르다. C는 US-ASCII 7비트 문자 집합을 사용하며, 높은 비트가 설정된 바이트를 잘못된 문자로 처리한다. 따라서, 예를 들면 ls 명령은 해당 로케일의 물음표로 그러한 문자를 대체한다. 또 Mutt나 Pine에서 이러한 문자로 메일을 보내려고 하면 RFC 비준수 메시지가 전송된다(발송 메일의 문자 집합은 알 수 없는 8-bit로 표시됨). 따라서 8비트 문자가 절대 필요하지 않을 경우에만 C 로케일을 사용할 수 있다.

UTF-8 기반 로케일은 일부 프로그램에서 잘 지원되지 않는다. 문서화 작업이 진행 중이며, 가능하면 http://www.linuxfromscratch.org/blfs/view/9.1/introduction/locale-issues.html를 참고하여 이러한 문제를 해결하라.