LinuxでのC言語開発環境について〜環境設定.bashrcの例〜

  • メモ
    • いろんなサイトを参考した(多すぎて覚えてない)
  • ファイルリスト
.bashrc
.etc/env.sh
.etc/bashrc
  • .bashrc
if [ -f ~/.etc/env.sh ]; then
    . ~/.etc/env.sh
fi
if [ -f ~/.etc/bashrc ]; then
    . ~/.etc/bashrc
fi
  • .etc/env.sh
######################################## 
# 環境の設定

#export LANGUAGE=ja_JP.SJIS
export LANG=ja_JP.UTF-8
export LC_ALL=ja_JP.UTF-8
export TZ=JST

# Subversionでコミットコメント書く際のエディタ設定
export SVN_EDITOR='vim'

# indentコマンドで自動設定される設定値ファイル
export INDENT_PROFILE=${HOME}/.etc/indent.pro

# 編集ツールをviに設定
export EDITOR=vi

# man とかを見るときはいつも less を使う
#export PAGER=less

# LESSの設定
#export JLESSCHARSET=japanese-sijs
#export LESSCHARSET=japanese-sjis
export LESS='-c -m -x4'
#export LESS="-isnMCd"
#export LESS='-X -F -i -m'
#export LESSCHARSET="latin1"
#export LESSCHARDEF=8bcccbcc18b95.33b33b.
#export LESSBINFMT='*n-'
#export LESSOPEN="|/usr/bin/lesspipe.sh %s"

# manの設定
#export MANPATH=/usr/bin/man:/usr/local/man:/usr/share/man:/sw/man
#export MANPAGER=/usr/bin/less
#export MANWIDTH=80

# パスの設定
export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:$HOME/bin
#export RUBYLIB=$HOME/lib/ruby
#export PERL5LIB=$HOME/lib/perl

######################################## 
# alias設定
alias ls='ls -F --color'
alias ll='ls -l'
alias lh='ls -lh'
alias ld='ls -ld'
alias l='ls'
alias sl='ls'
alias la='ls -A'
alias lla='ls -lA'
alias llr='ls -ltrA'

# サイズはK,M,Gで表示
alias df='df -h'
alias du='du -h'

alias 644='chmod 644'
alias 755='chmod 755'

alias view='vi -R'

# 拡張正規表現,色づけ
export GREP_COLOR='1;37;41'
alias grep='grep -E --color=auto'

# -iは確認を行う。-vは詳細な情報の表示
alias cp='cp -iv'
alias mv='mv -iv'
alias rm='rm -iv'

# odは16進数でのバイナリダンプコマンド
# -tx1zは、1バイトごとに区切って表示
# -Axはアドレスを16進数表示、-vは連続する0をスキップしない
alias od='od -tx1z -Ax -v'

alias cdp='cd -P'
alias pwdp='pwd -P'
  • .etc/bashrc
########################################
# 自環境の設定
# 新しく作られたファイルのパーミッションがつねに 644 になるようにする
umask 022

# core作る
ulimit -c unlimited
# core作らない
#ulimit -c 0 

########################################
# historyの設定

#---------------------------------------
# 各端末間で履歴の共有をする
function share_history {  # 以下の内容を関数として定義
        history -a  # .bash_historyに前回コマンドを1行追記
        history -c  # 端末ローカルの履歴を一旦消去
        history -r  # .bash_historyから履歴を読み込み直す
}
# 上記関数をプロンプト毎に自動実施 後で設定
#PROMPT_COMMAND='share_history'  
shopt -u histappend   # .bash_history追記モードは不要なのでOFFに

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

#---------------------------------------
# 履歴のサイズ。
export HISTSIZE=19999  # 履歴のMAX保存数を指定
# export HISTFILESIZE=49999 #ファイルに格納する保存数HISTSIZEと同じなので省略

#---------------------------------------
# 記録する内容を設定
# ignoredups:入力が最後のヒストリと一致する場合に記録しない
# ignorespace:スペースやタブで始まる行をヒストリに記録しない
# ignoreboth:ignorespaceとignoredups両方を指定
# 指定なし:すべての入力をヒストリに記録する
export HISTCONTROL=ignoredups
# 履歴に入れないもの
HISTIGNORE="ls:la:ll:h:H:cd"

#---------------------------------------
# 履歴にタイムスタンプを追加
#export HISTTIMEFORMAT="%y/%m/%d %H:%M:%S: "
export HISTTIMEFORMAT='%Y-%m-%d %T: '

#---------------------------------------
# Ctrl+R の検索は使いづらいので下記を追加
# h: 直前の履歴 30件を表示する。引数がある場合は過去 1000件を検索する。
# (history で履歴全部を表示させると多すぎるので)
function h {
        if [ "$1" ]; then history 1000 | grep "$@"; else history 30; fi
}
# H: 直前の履歴 30件を表示する。引数がある場合は過去のすべてを検索する。
function H {
        if [ "$1" ]; then history | grep "$@"; else history 30; fi
}

#---------------------------------------
# fcコマンド拡張
#function fceditor ()  {  tt=/tmp/$$.sh; cat $1 | ( read -rd '' s; t=/tmp/$$; echo "function a(){" > $t; echo "$s" >> $t; echo -e " }\n declare -f a" >> $t; chmod +x $t; $t > /dev/null 2>&1; if [ $? = 0 ]; then a=`$t|sed '1,2d;$d;s/....//'`";"`echo "$s"|tail -1|sed 's/^.\+\(#[^#]\+\)$/\1/'`; else a="$s"; fi; rm $t; echo "$a" ) > $tt; vim $tt; sed 's/^ *//' $tt > $1; rm $tt; }
#export FCEDIT=fceditor

########################################
# 端末・プロンプトの設定

#---------------------------------------
# 色設定
export CR="$(echo -ne '\r')"
export LF="$(echo -ne '\n')"
export TAB="$(echo -ne '\t')"
export ESC="$(echo -ne '\033')"
export C_BLACK="${ESC}[30m"
export C_RED="${ESC}[31m"
export C_GREEN="${ESC}[32m"
export C_YELLOW="${ESC}[33m"
export C_BLUE="${ESC}[34m"
export C_MAGENTA="${ESC}[35m"
export C_CYAN="${ESC}[36m"
export C_WHITE="${ESC}[37m"
export C_HIGHLIGHT_BLACK="${ESC}[30;1m"
export C_HIGHLIGHT_RED="${ESC}[31;1m"
export C_HIGHLIGHT_GREEN="${ESC}[32;1m"
export C_HIGHLIGHT_YELLOW="${ESC}[33;1m"
export C_HIGHLIGHT_BLUE="${ESC}[34;1m"
export C_HIGHLIGHT_MAGENTA="${ESC}[35;1m"
export C_HIGHLIGHT_CYAN="${ESC}[36;1m"
export C_HIGHLIGHT_WHITE="${ESC}[37;1m"
export C_DEFAULT="${ESC}[m"

#---------------------------------------
# 現在のユーザによってプロンプトの色を変える。 rootは赤
case "$UID" in
0) U_col=${C_RED};;
*) U_col=${C_GREEN};;
esac

#---------------------------------------
# screenの時はwindow番号をホストの後につける
# sshで入っているときは、アクセス元IPをさらにその後ろにマゼンダで
PS_USER="\[${U_col}\]\u\[${C_DEFAULT}\]"
PS_HOST="\[${C_GREEN}\]\h\[${C_DEFAULT}\]"
PS_WORK="\[${C_HIGHLIGHT_CYAN}\]\W\[${C_DEFAULT}\]"
PS_HIST="\[${C_HIGHLIGHT_BLUE}\]\!\[${C_DEFAULT}\]"

if [ -n "${SSH_CLIENT}" ] ; then
        PS_SSH="\[${C_MAGENTA}\]/$(echo ${SSH_CLIENT} | sed 's/ [0-9]\+ [0-9]\+$//g')\[${C_DEFAULT}\]"
else
        PS_SSH=""
fi

if [ -n "${WINDOW}" ] ; then
        PS_SCREEN="\[${C_CYAN}\]#${WINDOW}\[${C_DEFAULT}\]"
else
        PS_SCREEN=""
fi

#---------------------------------------
# [ (ユーザ名/黒) @ (ホスト名/緑) (履歴番号/青) : (ワーキングディレクトリ/明るい白) ] \$
#export PS1="[${PS_USER}@${PS_HOST}${PS_SCREEN}${PS_SSH} ${PS_HIST}:${PS_WORK}]\$ "
# 長いので短く
export PS1="[${PS_USER}@${PS_HOST}${PS_SCREEN} ${PS_HIST}:${PS_WORK}]\$ "


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

# globalコマンドで関数名検索時に関数名補完させる
function global_funcs() {
        local cur
        cur=${COMP_WORDS[COMP_CWORD]}
        COMPREPLY=(`global -c $cur`)
}
complete -F global_funcs global