WEBエンジニアの人で grep
とかのコマンドを使ってない人はいないと思います。
ただRailsなどのフレームワーク上で $ grep -r hoge .
なんて風に使うと、.git/
配下のコミット情報や *.log
などのログ系のファイルなんかも引っかかってずらずら表示されるのでウザいですよね〜。
今回は拡張子を指定して検索出来るコマンドを昔作ってたものに手を加えたので紹介してみます。
開発者の人は同じようなaliasやshellコマンドを自分で書いてる人も多いと思いますが、もしよかったら参考に自作コマンドを作ってみて下さい。
【初心者向け】コマンドファイルの用意の仕方
一応前提知識が無い方向けに使い方も書いておきます。
- 下記Gistソースをコピペorダウンロードして格納しよう
- gistは拡張子で色付けされるので
.sh
付けてるけど短い名前で且つ既存のコマンドにかぶらないようにリネームして下さい。 - 格納場所は
~/bin
とかのディレクトリで良いと思う。なければ$ mkdir ~/bin
しよう。 - Windows?シラネ。
- gistは拡張子で色付けされるので
- PATHを通しておいて下さい
- コマンドを探しに行ってくれる場所を表す環境変数のPATHに
~/bin
を追加しよう。 - 現状のPATHの状態は
$ env | grep PATH
とかで確認できます。 - bash使いの人は
~/.bashrc
にでもexport PATH="$HOME/bin:$PATH"
とか書いておけばOKです。
- コマンドを探しに行ってくれる場所を表す環境変数のPATHに
- 実行権限を与えよう
- 該当ファイル名が
~/bin/sch
なら$ chmod +x ~/bin/sch
とかで実行権限をあげよう。 - これでファイルの場所を指定しなくても
$ sch ~~~
のようにコマンドとして指定出来る様になります。
- 該当ファイル名が
- ターミナル(shell)を再起動しよう
- 使ってみてね
シェルスクリプトの内容
なんだかキレイに見える気がするのでGistにあげてみました。
ファイルを指定する検索コマンドの使用方法
ファイルを ~/bin/sch
として保存している場合、
$ sch hoge erb
とすると末尾が erb
拡張子のファイル内に hoge
が記載されている箇所をコマンドラインに出してくれます。
$ sch hoge erb slim
というように複数ファイルの指定も可能。
$ sch hoge
で使用するとデフォルトのファイル
(上記ファイルで言うところの DEFAULT_FILES="html erb slim haml css scss sass js coffee rb yml"
の部分)
が対象になります。
実装方法のポイント
基本的にパラメータに応じてfindしてgrepしているだけですが下記のポイントは良いかもしれません。
grepの--color=alwaysオプションで見やすい
grepの検索結果をターミナル上で色付きで表示させるのが --color=always
オプションです。
普段は --color=auto
にしている人だとgrep結果は色がつかないかと思いますが、こういったコマンドだけでも色を付けておくと見やすいかも。
ちなみに 環境変数の GREP_OPTIONS
に以下のように設定しておくと常に色付きとかに出来るようなので自分は設定しています。
export GREP_OPTIONS="--binary-files=without-match --color=auto"
参考: grep の 環境変数 GREP_OPTIONS - 技術メモ帳
bashでもzshでも使える
普段はzsh使っているんですが、bashとzshではShellScriptの配列の扱いなどが結構違います…。
特にパラメータの扱い方やfor文での分割ループの回し方などに差がある為、今回はあえて set
でデフォルトの挙動をするようにパラメータ群を追加したり、for文ではなくwhile文を使って順次パラメータを取り出すことでzshでもbashでも動くようになってます。
参考: 位置パラメーターの一括展開 $* $@ "$*" "$@" の違いを知れ!! - Shell Script Advent Calendar 2016 - ダメ出し Blog
その他、
「自分はこういうの使ってるよ!」とか
「こういう場合どうしてる?」とか
「無知乙!ここはこうした方がいいゼ!」
みたいなのあれば個別にメッセージとか頂ければ幸いです( ・`ω・´)