bashの使い方その2

いくつか「.bashrc」の設定も増えてきたのでまとめ。

.baskrc

$e ~/.bashrc

alias la='ls -alg --color=auto'
alias e='sudo nano'
alias s='sudo'
alias scr='screen -UxR'
alias pathlist='echo -e ${PATH//:/\\n}' # PATHのリスト表示
alias rmi='rm -i'   # 削除確認
alias mvi='mv -i'   # 上書き確認
alias cpi='cp -i'   # 上書き確認
alias lh='ls -lh --color=auto'  # ファイルサイズを見やすく表示
alias ka='killall' # 短縮

HISTSIZE=99999          # 保存数 0で無効
HISTFILESIZE=99999999   # ファイルへの記録数 0で無効
HISTCONTROL=ignoreboth  # スペースorタブの開始行、前と重複する行は記録しない

set -o notify          # バックグラウンドのジョブが終了したらその時点で通知
set -o noclobber       # リダイレクト(>, >&, <>)で既存ファイルを上書きしない
shopt -s cdspell       # directory移動時の小さなtypoを修正
shopt -s checkhash     # ハッシュ表にあるコマンドについて実際に存在するかを確認
shopt -s checkwinsize  # 端末のウィンドウサイズを${COLUMNS}と${LINES}に反映
shopt -s cmdhist       # 複数行のコマンドの全ての行を1つの履歴エントリに保存
shopt -s histappend    # 履歴を上書きせず追加のみ行う(手元の環境ではデフォルト)
shopt -s no_empty_cmd_completion # 入力が空の状態では補完・PATH検索をしない
shopt -s nocaseglob    # 「*」などのパス名展開で大文字小文字を区別しない
shopt -u sourcepath
unset MAILCHECK        # メールチェックはしない

## 新しく作られたファイルのパーミッションがつねに 644 になるようにする
umask 022

## core ファイルを作らせないようにする
ulimit -c 0

export PAGER=less
export LESS='-X -i -P ?f%f:(stdin).  ?lb%lb?L/%L..  [?eEOF:?pb%pb\%..]'
export LESSOPEN="| $HOME/bin/lesspipe.sh %s"

if  "$PS1" ; then
  # EOF (Ctrl-D) 入力は 10回まで許可。
  IGNOREEOF=10

  # "!"をつかって履歴上のコマンドを実行するとき、実行前に必ず展開結果を確認
  shopt -s histverify

  # 履歴の置換に失敗したときやり直せるようにする。
  shopt -s histreedit

  # "@" のあとにホスト名を補完させない。
  shopt -u hostcomplete

  # つねにパス名のテーブルをチェックする。
  shopt -s checkhash

  # なにも入力してないときはコマンド名を補完しない。
  shopt -s no_empty_cmd_completion

  # i: 直前の履歴 30件を表示する。引数がある場合は過去 1000件を検索
  function i {
      if [ "$1" ]; then history 1000 | grep "$@"; else history 30; fi
  }

  # I: 直前の履歴 30件を表示する。引数がある場合は過去のすべてを検索
  function I {
      if [ "$1" ]; then history | grep "$@"; else history 30; fi
  }

  # GNU screen 用のコマンド。引数を screen のステータス行に表示。
  function dispstatus {
      if  "$STY" ; then echo -en "\033k$1\033\134"; fi
  }

  # つねに直前のコマンドの終了状態をチェックさせる。
  # もし異常終了した場合は、その状態(数値)を表示する。
  function showexit {
    local s=$?
    dispstatus "${PWD/\/home\/yusuke/~}"
    if  $s -eq 0 ; then return; fi
    echo "exit $s"
  }
  PROMPT_COMMAND=showexit

  # px: 長いプロンプトと短いプロンプトを切り換える。
  function px {
      local tmp=$PS1; PS1=$PS0; PS0=$tmp;
  }

  # h: csh における which と同じ。
  function h { command -v $1; }

  # wi: whatis の略。指定されたコマンドの実体を表示。
  function wi {
    case `type -t "$1"` in
     alias|function) type "$1";;
     file) L `command -v "$1"`;;
     function) type "$1";;
    esac
  }

  # 現在実行中のジョブを表示。
  function j { jobs -l; }

  # Perlワンライナー補助。
  function P { perl -e 'sub f{'"$*"';}print &f(@ARGV),"\n";'; }

  alias grp='grep -ir'
  alias 644='chmod 644'
  alias 755='chmod 755'
  alias ls='ls -F'
  alias ..='cd ..'

  function mkrails {
    if [ "$1" ]; then
      mkdir /home/www/$@
      mkdir /home/www/$@/public
      mkdir /home/www/$@/log
      mkdir /home/www/$@/cgi-bin
      mkdir /home/www/$@/config
    else
      echo "ドメイン名を指定してください(ex. 2.5-55.jp)"
    fi
  }

fi

historyコマンド

これは超便利。↑でひとつずつ表示していってて面倒臭いなぁと思っていたので、iコマンドには感動。

$i 'sudo rm -rf'
   11  sudo rm -rf /home/svn/hoge.rails
   61  sudo rm -rf hoge.rails
  412  sudo rm -rf /home/test
  423  sudo rm -rf work
  424  sudo rm -rf test
  565  i 'sudo rm -rf'

実行するときは、!+番号で。いったんコマンドラインに表示されるので確認したり修正できて楽チン。

$!412
$sudo rm -rf /home/test

参考

こちら(→my bashrc)の「.bashrc」を全面的に参考にさせていただきました。感謝です。