Bash †
bash_completion: コマンド補完 †
- command [tabキー] コマンドが補完できるようになる
- /etc/bash_completion.d/ 等にscriptを追加するか、「complete -C $command_path command」のようにコマンドを実行する。
- awscli はyumでインストールすると /etc/bash_completion.d/ に自動追加された。
- 以下を ~/.bashrc や ~/.bash.d/に追加
- 90-bash_completion.sh
if [[ -f /etc/bash_completion ]]; then
# RHEL/CentOS 6, Ubuntu 12.04 LTS
. /etc/bash_completion
elif [[ -f /etc/profile.d/bash_completion.sh ]]; then
# RHEL/CentOS 7
[ -n "$BASH_COMPLETION" ] || BASH_COMPLETION=/etc/bash_completion
[ -n "$BASH_COMPLETION_DIR" ] || BASH_COMPLETION_DIR=/etc/bash_completion.d
[ -n "$BASH_COMPLETION_COMPAT_DIR" ] || BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
elif [[ -f /usr/local/etc/bash_completion ]]; then
# macOS: brew
. /usr/local/etc/bash_completion
[ -n "$BASH_COMPLETION" ] || BASH_COMPLETION=/usr/local/etc/bash_completion
[ -n "$BASH_COMPLETION_DIR" ] || BASH_COMPLETION_DIR=/usr/local/etc/bash_completion.d
[ -n "$BASH_COMPLETION_COMPAT_DIR" ] || BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
fi
保存件数を変更 †
HISTSIZE,HISTFILESIZEを大きい値(例:10万件, ~/.bash_historyが380KB程度)にするとbashの動作が遅くなったので注意。
- HISTSIZE: historyコマンドで有効な履歴件数。デフォルト500。
- HISTFILESIZE: ~/.bash_history に保存する履歴件数。デフォルト: 500。
historyコマンドで日付を表示 †
~/.bashrc を ~/.bash.d/ に分割する †
長くなりがちな ~/.bashrc を ~/.bash.d/*.sh に分割する。
ansible等で管理しやすくなる
- ファイル名の昇順で実行されるので、順序を付けたい場合は、「10-example.sh」「90-example.sh」等にすると良い
mkdir ~/.bash.d
vim ~/.bashrc
--
if [ -d "${HOME}/.bash.d" ] ; then
for f in "${HOME}"/.bash.d/*.sh ; do
[ -x "$f" ] && . "$f"
done
unset f
fi
--
# 例: colordiff
vim ~/.bash.d/colordiff.sh
--
if $(type colordiff > /dev/null 2>&1);then
alias diff='colordiff -u'
else
alias diff='diff -u'
fi
--
chmod +x ~/.bash.d/*.sh
source ~/.bashrc
bashのfunctionをxargsで使う †
function say_hello() { echo "Hello, world: $1"; }
export -f say_hello
ls | xargs -i bash -c "say_hello {}"
bashショートカット †
Ctrl + l | 画面をクリア。カレント行を表示 |
Ctrl + d | ログアウト |
Ctrl + a | 行頭へ移動 |
Ctrl + e | 行末へ移動 |
Ctrl + u | カーソルの左を削除 |
Ctrl + k | カーソルの右を削除 |
Ctrl + w | カーソルの右を削除 |
Ctrl + y | 削除した部分をペースト |
TAB | ファイルやコマンドの自動補完 |
Ctrl + r | コマンドヒストリ |
!! | 直前のコマンドを再実行 |
Ctrl + z | 現在のジョブを一時停止 fg:元に戻す bg:裏に回す |
Ctrl + c | 現在のジョブの強制終了 |
.bash_profile と .bashrcの違い †
結論: ~/.bashrc だけ使う。 ~/.bash_profile はデフォルトのままで良い。
- CentOS6/7の場合: ~/.bash_profile => ~/.bashrc => /etc/bashrc と呼ばれる
/.bash_profile
- sshログイン時に1回だけ実行される
- 環境変数(export)の設定に使用。exportした変数はプロセス間で引き継がれるため1回で良い
/etc/profile, /etc/profile.d/ | 全ユーザ共通。ログインした時。 |
~/.bash_profile | /etc/profileの次 |
~/.bash_login | ログイン後、~/.bash_profile が無い場合 |
~/.profile | ログイン後、~/.bash_login が無い場合 |
~/.bashrc | 新しいbashシェルが起動した時 |
~/.bash_logout | ログインしたシェルを終了する時 |
bashでコマンドヒストリー検索 †
- ↑ or CTRL+P
- 前の履歴
- ↓ or CTRL+N
- 次の履歴
- CTRL+R
- 後方インクリメンタル検索。押す度に検索。
- ESC or CTRL+G
- インクリメンタル検索の中止
- CTRL+S
- ターミナルロック or 前方インクリメンタル検索(押す度に検索)
- CTRL+Q
- ターミナルロック解除
- ターミナルロック機能の停止。前方インクリメンタル検索をよく使うのであれば、ターミナルロック機能の停止を ~/.bashrc 等に書いておく
stty stop undef