19
●● bash 2014/09/29 #ssmjp @th0x0472

#ssmjp 2014/09 bashのちょっとした便利機能の紹介

Embed Size (px)

DESCRIPTION

2014/09の #ssmjp で発表した内容です。

Citation preview

●●なbash2014/09/29 #ssmjp @th0x0472

今一番ホットなシェル

それは間違いなくGNU bash

CVE-2014-6271

CVE-2014-7169

#ShellShock

きょうのおはなし

#ShellShockは関係ありません。

bashの変態機能・・・ではなくて、日々のオペレーションを楽にしてくれるかもしれないちょっとした機能を紹介します。

スライドやデモはSlideShare、Qiitaにアップします。

おまえだれよ

@th0x0472黒字に緑のQRコードアイコン。twitter, blog はこれで探せます。そこからSlideshare, Qiitaたどれます。

facebook放置気味、、、すみません。

サマリ

プロセス置換(Process Substitution)

チルダ展開(Tilde Expansion)

ぶっちゃけこの2つのキーワードを覚えて、あとはbashのマニュアル読めばOK。

プロセス置換

cmd <(list)listの標準出力への出力が、cmdが読み込むファイルの内容になる

grep -f, diff, comm, pastewhile read s; do ... ; done < <(list)

当然逆向きもあるcmd >(list)cmdがファイルに出力する内容をlistの標準入力につなげる

tee・・・くらいしか思い浮かばなかったけど

exec 1> >(tee file), exec 2> >(tee file >&2) すごいbash プロセス置換 双六 でぐぐるhttp://sechiro.hatenablog.com/entry/2013/08/15/bash%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E7%BD%AE%E6%8F%9B%E6%A9%9F%E8%83%BD%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E3%82%B7%E3%82%A7%E3%83%AB%E4%BD

%9C%E6%A5%AD%E3%82%84%E3%82%B9

しくみ

/dev/fd/xx という名前付きパイプでいい感じにつないでくれる。

$ echo <(:) <(:)/dev/fd/63 /dev/fd/62

「いい感じ」という表現が便利すぎる

チルダ展開・・・の前に

ディレクトリスタックのお話

pushd, popd, dirs

ディレクトリスタック以前

cd - の限界。2地点の往復だけ。

Tabキー叩きまくりもツライ。

ディレクトリ移動で長いパス名を入力するのはめんどくさい。ダルい。マジで。

そこでディレクトリスタック

pushd /path/to/some/whereディレクトリスタックに積む

pushd +nディレクトリスタックn番目のディレクトリに移動

popd +nディレクトリスタックからn番目を削除

そこでディレクトリスタック

dirs -vディレクトリスタック内のディレクトリを番号付きで表示する

dirs -cディレクトリスタックを空にする

dirs -lディレクトリスタック内のディレクトリをフルパスで表示する

ディレクトリスタック、でも・・・

pushd +n

実行する度にスタック内の順番が変わる

n番はあそこ、x番はここ・・・が崩れる

変更を脳内シミュレートなんてしてられない

毎回 dirs -v するのも面倒くさい

そこで チルダ(~)展開

~ ってホームディレクトリでしょ。

ホームだけじゃないcd ~+nディレクトリスタックのn番目に移動

cd ~-nディレクトリスタックの最後からn番目に移動(カウントは0始まりです、念のため)

何度やってもディレクトリスタック内の順番は入れ替わらない!

移動だけじゃない

$ ls ~+n

$ touch ~+n/file

...etc

要は、普通にコマンドラインで使えますよ。ちなみに展開されるとフルパスになります。

ヒストリはこんな風に

$ history | grep "~+[0-9]" 111 cd ~+3 114 echo ~+2 115 ls ~+2 116 touch ~+2/file

コマンドが実行された時点のディレクトリスタックの内容が分からないと・・・・。

まとめ

プロセス置換(Process Substitution)

チルダ展開(Tilde Expansion)

ぶっちゃけこの2つのキーワードを覚えて、あとはbashのマニュアル読めばOK。

おしまい。ご静聴ありがとうございました。