bash の動作

bash は login により、ログインシェルとして起動されます。起動された bash は、/etc/profile、‾/.profile の順でそれぞれの内容を実行します。

/etc/profile
# Set the values for some environment variables:
export MINICOM="-c on"
export MANPATH=/usr/local/man:/usr/man:/usr/X11R6/man
export HOSTNAME="`cat /etc/HOSTNAME`"
export LESSOPEN="|lesspipe.sh %s"
export LESS="-M"

環境変数を設定します。

/etc/profile
# If the user doesn't have a .inputrc, use the one in /etc.
if [ ! -r "$HOME/.inputrc" ]; then
  export INPUTRC=/etc/inputrc
fi

ホームディレクトリ内の .inputrc が読み込み可能でない場合は、環境変数 INPUTRC を /etc/inputrc と設定します。

/etc/profile
# Set the default system $PATH:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games"

シェル変数 PATH を設定します。

/etc/profile
# For root users, ensure that /usr/local/sbin, /usr/sbin, and /sbin are in
# the $PATH.  Some means of connection don't add these by default (sshd comes
# to mind).
if [ "`id -u`" = "0" ]; then
  echo $PATH | grep /usr/local/sbin 1> /dev/null 2> /dev/null
  if [ ! $? = 0 ]; then
    PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH
  fi
fi

root であれば、シェル変数 PATH を調べます。/usr/local/sbin が含まれていなければ、/usr/local/sbin:/usr/sbin:/sbin を追加します。

/etc/profile
# I had problems using 'eval tset' instead of 'TERM=', but you might want to 
# try it anyway. I think with the right /etc/termcap it would work great.
# eval `tset -sQ "$TERM"`
if [ "$TERM" = "" -o "$TERM" = "unknown" ]; then
 TERM=linux
fi

シェル変数 TERM が設定されていない、あるいは unknown であれば、TERM を linux と設定します。

/etc/profile
# Set default POSIX locale:
export LC_ALL=POSIX

環境変数 LC_ALL を POSIX と設定します。

/etc/profile
# Set ksh93 visual editing mode:
if [ "$SHELL" = "/bin/ksh" ]; then
  VISUAL=emacs
#  VISUAL=gmacs
#  VISUAL=vi
fi

シェル変数 SHELL が /bin/ksh であれば、シェル変数 VISUAL を emacs と設定します。

/etc/profile
# Set a default shell prompt:
#PS1='`hostname`:`pwd`# '
if [ "$SHELL" = "/bin/pdksh" ]; then
 PS1='! $ '
elif [ "$SHELL" = "/bin/ksh" ]; then
 PS1='! ${PWD/#$HOME/‾}$ '
elif [ "$SHELL" = "/bin/zsh" ]; then
 PS1='%n@%m:%‾%# '
elif [ "$SHELL" = "/bin/ash" ]; then
 PS1='$ '
else
 PS1='¥u@¥h:¥w¥$ '
fi

シェル変数 SHELL に応じて シェル変数 PS1 を設定します。

表 2 コマンドプロンプトの設定
シェル変数 SHELL の値シェル変数 PS1 の値
/bin/pdksh! $
/bin/ksh! ${PWD/#$HOME/‾}$
/bin/zsh%n@%m:%‾%#
/bin/ash$
上記以外¥u@¥h:¥w¥$

これは、コマンドプロンプトの設定です。

/etc/profile
PS2='> '

シェル変数 PS2 を > と設定します。これは、行継続プロンプトの設定です。

/etc/profile
export PATH DISPLAY LESS TERM PS1 PS2

シェル変数 PATH、DISPLAY、LESS、TERM、PS1、PS2 を環境変数とします。

/etc/profile
# Default umask.  A umask of 022 prevents new files from being created group
# and world writable.
umask 022

umask を 022 に設定します。

/etc/profile
# Set up the LS_COLORS and LS_OPTIONS environment variables for color ls:
if [ "$SHELL" = "/bin/zsh" ]; then
 eval `dircolors -z`
elif [ "$SHELL" = "/bin/ash" ]; then
 eval `dircolors -s`
else
 eval `dircolors -b`
fi

環境変数 SHELL が /bin/zsh であれば、dircolors -z の出力を実行します。同様に、環境変数 SHELL が /bin/ash であれば、dircolors -s の出力を実行します。環境変数 SHELL がそれら以外であれば、dircolors -b の出力を実行します。例として、dircolors -b の出力を解説します。

bash$ dircolors -b
LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;
01:or=40;31;01:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01
;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.bz
2=01;31:*.rpm=01;31:*.deb=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.jpg=01;35:*.gif
=01;35:*.bmp=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*
.mpg=01;37:*.avi=01;37:*.mov=01;37:';
export LS_COLORS;
LS_OPTIONS=' --color=auto -F -b -T 0';
export LS_OPTIONS;
alias ls='/bin/ls $LS_OPTIONS';
alias dir='/bin/ls $LS_OPTIONS --format=vertical';
alias vdir='/bin/ls $LS_OPTIONS --format=long';
alias d=dir;
alias v=vdir;

環境変数 LS_COLORS を設定します。これは、ls のカラー表示の設定です。次に、環境変数 LS_OPTIONS を --color=auto -F -b -T 0 と設定します。さらに、エイリアスの設定をします。

表 3 エイリアスの設定
エイリアス
ls/bin/ls $LS_OPTIONS
dir/bin/ls $LS_OPTIONS --format=vertical
vdir/bin/ls $LS_OPTIONS --format=long
ddir
vvdir

dircolors の設定ファイルは /etc/DIR_COLORS です。

/etc/profile
# Notify user of incoming mail.  This can be overridden in the user's
# local startup file (‾/.bash.login or whatever, depending on the shell)
if [ -x /usr/bin/biff ]; then
 biff y
fi

/usr/bin/biff が実行可能であれば、biff y を実行します。

/etc/profile
# Append any additional sh scripts found in /etc/profile.d/:
for file in /etc/profile.d/*.sh ; do
  if [ -x $file ]; then
    . $file
  fi
done

/etc/profile.d/ 内にある拡張子 sh のファイルをすべて調べます。実行可能であれば、それを実行します。

/etc/profile
# For non-root users, add the current directory to the search path:
if [ ! "`id -u`" = "0" ]; then
 PATH="$PATH:."
fi

root ユーザでない場合は、シェル変数 PATH に . を追加します。

そして、bash はコマンドプロンプトを表示します。

tomoaki@darkstar:‾$ _

参考文献


前へ 起動プロセス入門 次へ