シェル ( 2 )

June 04, 2018

関数の定義

function コマンドを用いると、bash シェル上で利用する独自の関数を定義できる。

$ function lslink() { ls -l | grep '^l'; }  
$ lslink   
lrwxrwxrwx 1 ec2-user ec2-user 8  519 05:51 copy2 -> Original  
lrwxrwxrwx 1 ec2-user ec2-user 8  519 05:47 symboliclink-1 -> Original  
lrwxrwxrwx 1 ec2-user ec2-user 8  519 05:47 symboliclink-2 -> Original  
$ function lslink() { ls -l $1 | grep '^l'; }  
$ lslink copy2   
lrwxrwxrwx 1 ec2-user ec2-user 8  519 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 があれば読み込んで実行する。

ちなみにログインシェルと対話型シェルの違いについては、以下のページに解説がある。

ログインシェルとインタラクティブシェルと~/.bashrc達の関係


 © 2023, Dealing with Ambiguity