関数の定義
function コマンドを用いると、bash シェル上で利用する独自の関数を定義できる。
$ function lslink() { ls -l | grep '^l'; }
$ lslink
lrwxrwxrwx 1 ec2-user ec2-user 8 5月 19 05:51 copy2 -> Original
lrwxrwxrwx 1 ec2-user ec2-user 8 5月 19 05:47 symboliclink-1 -> Original
lrwxrwxrwx 1 ec2-user ec2-user 8 5月 19 05:47 symboliclink-2 -> Original
$ function lslink() { ls -l $1 | grep '^l'; }
$ lslink copy2
lrwxrwxrwx 1 ec2-user ec2-user 8 5月 19 05:51 copy2 -> Original
set コマンドで確認可能。
$ set | tail -4
lslink ()
{
ls --color=auto -l $1 | grep --color=auto '^l'
}
また、定義されている関数のみを表示するには declare -f コマンドを用いる。
$ declare -f
lslink ()
{
ls --color=auto -l $1 | grep --color=auto '^l'
}
unset コマンドで関数を削除できる。
$ unset lslink
$ declare -f
bash の設定ファイル
/etc/profile
bash のログイン時に実行される。全てのユーザーから参照されるため、基本的な環境変数などが設定される。
$ cat /etc/profile | grep -v ^# | head -20
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
if [ -x /usr/bin/id ]; then
if [ -z "$EUID" ]; then
# ksh workaround
/etc/bashrc
bash 起動時に実行され、すべてのユーザーから参照される。
$ cat /etc/bashrc | grep -v ^# | head -20
if [ "$PS1" ]; then
if [ -z "$PROMPT_COMMAND" ]; then
case $TERM in
xterm*)
if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
else
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
fi
;;
screen)
if [ -e /etc/sysconfig/bash-prompt-screen ]; then
PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
else
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
fi
;;
~/.bash_profile
そのユーザー独自の設定が記載されており、ログイン時に事項される。~/.bashprofile が存在しない場合は、~/.bashlogin、~/.profile の順にファイルが検索され、最初に見つかったものが読み込まれる。
~/.bashrc
対話型シェルが起動されるたびに実行される。システムを利用する前ユーザーに対する設定は /etc/bashrc に書き、~/.bashrc から呼び出すようになっている。
$ cat .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
PS1="$ "
~/.bash_logout
ログインシェルの終了時に ~/.bash_logout があれば読み込んで実行する。
ちなみにログインシェルと対話型シェルの違いについては、以下のページに解説がある。