Skip to main content

Bash

Bash는 Unix Shell의 한 종류로, 하나의 application이면서 동시에 명령어이다. 주로 명령어 형태로 동일 시스템 내의 다른 application을 실행한다. 또한, Linux 또는 Unix에서는 Bash가 기본 Shell이다.


Bash와 관련된 파일들

간단히 man bash 명령어를 통해 다음의 설명들을 확인할 수 있다.

$ man bash

(...)

FILES
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file

이때, /etc에는 시스템의 전체 설정 파일이 포함되는데, 예를 들어, /etc/hosts와 같은 파일이 있고, 이는 아래의 명령어로 쉽게 확인이 가능하다.

$ ls /etc/

bash_profile과 bashrc

여기서 .bash_profile 파일과 .bashrc 파일이 있는데, .bash_profile의 경우, Shell에 사용자가 로그인 했을 때 최초로 한 번 실행되는 설정 파일이며, .bashrc의 경우, 터미널 등에서 새로운 탭을 켜는 등의 새로운 동작을 수행하는 경우에 실행되는 파일이다. 또한, .bashrc 파일의 경우, 로그인 되지 않은 사용자에게도 실행이 된다.

이에, .bash_profile 파일에 .bashrc 파일을 다음과 같이 항상 불러오도록 설정을 하곤 한다.

# .bash_profile

if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi

zsh를 사용하는 경우

zsh을 사용하는 경우, .zprofile과 같이 현재 로그인한 사용자에게 적용되는 설정 파일이 있긴 하지만, 보통 .zshrc라는 하나의 파일에서 모든 설정을 한다.

아래와 같이 zsh 설명을 보면,

$ man zshall

STARTUP/SHUTDOWN FILES
Commands are first read from /etc/zshenv; this cannot be overridden. Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the former affects
all startup files, while the second only affects global startup files (those shown here with an path starting with a /). If one of the options is unset at
any point, any subsequent startup file(s) of the corresponding type will not be read. It is also possible for a file in $ZDOTDIR to re-enable GLOBAL_RCS.
Both RCS and GLOBAL_RCS are set by default.

Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login shell, commands are read from /etc/zprofile and then $ZDOTDIR/.zprofile. Then, if the
shell is interactive, commands are read from /etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell is a login shell, /etc/zlogin and $ZDOTDIR/.zlogin
are read.

When a login shell exits, the files $ZDOTDIR/.zlogout and then /etc/zlogout are read. This happens with either an explicit exit via the exit or logout
commands, or an implicit exit by reading end-of-file from the terminal. However, if the shell terminates due to exec'ing another process, the logout files
are not read. These are also affected by the RCS and GLOBAL_RCS options. Note also that the RCS option affects the saving of history files, i.e. if RCS is
unset when the shell exits, no history file will be saved.

If ZDOTDIR is unset, HOME is used instead. Files listed above as being in /etc may be in another directory, depending on the installation.

As /etc/zshenv is run for all instances of zsh, it is important that it be kept as small as possible. In particular, it is a good idea to put code that does
not need to be run for every single shell behind a test of the form `if [[ -o rcs ]]; then ...' so that it will not be executed when zsh is invoked with the
`-f' option.

Any of these files may be pre-compiled with the zcompile builtin command (see zshbuiltins(1)). If a compiled file exists (named for the original file plus
the .zwc extension) and it is newer than the original file, the compiled file will be used instead.

다음의 순서로 실행되는 것을 확인할 수 있다.

  1. /etc/zshenv
  2. $ZDOTDIR/.zshenv
  3. /etc/zprofile (login shell인 경우)
  4. $ZDOTDIR/.zprofile (login shell인 경우)
  5. /etc/zshrc (interactive shell인 경우)
  6. $ZDOTDIR/.zshrc (interactive shell인 경우)
  7. /etc/zlogin (login shell인 경우)
  8. $ZDOTDIR/.zlogin (login shell인 경우)

(만약 $ZDOTDIR 값이 설정되지 않았다면, $HOME을 대신 사용한다.)

Related Links