|
Ads日本語関連 †表示と入力 †.inputrc に以下のように書いておけば日本語の直接入力と表示が出来る。 set convert-meta off set meta-flag on set output-meta on その他 †
LANGと違う文字コードで grep する †こんなのを .bashrc とかで定義しとけば便利。 grepSJIS () { WORD="$1"; shift; LANG=ja_JP.SJIS grep "`echo $WORD|lv -Os`" "$@"; } grepUTF8 () { WORD="$1"; shift; LANG=ja_JP.UTF-8 grep "`echo $WORD|lv -Ou8`" "$@"; } grepEUC () { WORD="$1"; shift; LANG=ja_JP.ujis grep "`echo $WORD|lv -Oej`" "$@"; } egrepSJIS () { WORD="$1"; shift; LANG=ja_JP.SJIS egrep "`echo $WORD|lv -Os`" "$@"; } egrepUTF8 () { WORD="$1"; shift; LANG=ja_JP.UTF-8 egrep "`echo $WORD|lv -Ou8`" "$@"; } egrepEUC () { WORD="$1"; shift; LANG=ja_JP.ujis egrep "`echo $WORD|lv -Oej`" "$@"; } ホントは lgrep とかが一番日本語で grep が完璧だと思う。 ただ、lgrep って -r とか使えないんだよなぁ(--; 補完機能強化 †bash-completion †complete という組み込みコマンドで補完機能を自分で強化できるようになる。 自分で一つずつ便利だと思う補完機能を作って言っても良いのだが、bash-completion という色々な補完機能の詰め合わせパッケージがあるので、 これをインストールするだけでかなりの恩恵が受けられるようになる。 例えば cd と入力して tab を打つとディレクトリのみが補完されるようになったりしますよ。 コマンド履歴補完を賢くする †/.inputrc に以下のように書いておくと、例えば s と入力した状態で C-p を押すと s で始まるコマンド履歴が補完されるようになります。 "\C-n":history-search-forward "\C-p":history-search-backward スクリプト等で役立つもの †シェル変数 †以下はスクリプトで良く使うもの。それ以外は man を参照。
変数の展開方法色々 †bash には実に様々な変数の展開方法が用意されている。 あまり多用すると分かりにくいスクリプトになってしまう恐れがあるが、 知っていると結構便利なことがある。
例えば拡張子を変えるのに使ったりとかできる。 FNAME=hoge.jpg echo ${FNAME%*.jpg}.png とか。 参考:http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html#lbAZ シェルの組み込みコマンド †以下はスクリプトで良く使うもの。それ以外は man を参照。
ジョブが終了するのを待つ †foo& bar& とかでバックグラウンドジョブを作成した後に、それらが全て終了するのを待つ方法。
一時ファイルを作らずにコマンド出力をファイルのように扱う †以下のようにすると一時ファイルが必要そうな処理を、一時ファイルを作らずに行うことが出来ます。 diff <(ssh host cat file) <(ssh host cat file) この機能の名前をプロセス置換という。 一時ファイルを確実に削除する方法 †以下のような感じで trap を利用することで途中でスクリプトが中断された場合でも一時ファイルの削除が行えるようになります。 但し当然 KILL などで殺された場合はその限りではありません。 #!/bin/sh prog_name=$( basename "$0" ) tmp_file="/tmp/$prog_name.`date +%S`.$$" # クリーンナップ関数 function end_by_signal { rm -f "$tmp_file" exit } # トラップ設定 trap end_by_signal EXIT HUP INT QUIT TERM ABRT # 一時ファイルに何か保存 echo hoge > "$tmp_file" #以下適当 yを入力させて実行の最終確認を行う(安全装置) †以下の1行をスクリプトの頭に書いておけばよい read -p 'Are you sure? [y/N] ' -t10 k && test "x$k" == "xy" || exit 1 よく使うコマンド †
プロンプト †色の定義。 DEFAULT=$'\e[00m' GRAY=$'\e[1;30m' LIGHT_GRAY=$'\e[0;37m' WHITE=$'\e[1;37m' LIGHT_RED=$'\e[1;31m' LIGHT_BLUE=$'\e[1;36m' YELLOW=$'\e[1;33m' PURPLE=$'\e[1;35m' GREEN=$'\e[1;32m' BLUE=$'\e[1;34m' ssh経由の接続の場合プロンプトを変化させるようにする。 case ${SSH_CLIENT:-"DontUseSSH"} in "DontUseSSH" ) PS1=$GREEN'>'$GREEN'> '$DEFAULT ;; * ) PS1=$GREEN'>'$GREEN'>'$LIGHT_RED'> '$DEFAULT ;; esac 便利な自作関数/エイリアス †タイトルに現在のディレクトリを表示 †たとえば/usr/share/man/man1であれば/usr/.../man1と表示される。 さらに$HOMEは~に変換される。 case $TERM in xterm*|rxvt*|Eterm) PROMPT_COMMAND='echo -ne "\033]0;[$(pwd | sed "s#^$HOME#\~#;s#^\(\~*/[^/]*/\).*\(/[^/]*\)#\1...\2#")]\007"' ;; screen) PROMPT_COMMAND='echo -ne "\033k[$(pwd | sed "s#^$HOME#\~#;s#^\(\~*/[^/]*/\).*\(/[^/]*\)#\1...\2#")]\033\\"' ;; esac コメント † |