48 日目(雨)ゲーセン依存症ではないのか
いったん 6:30 頃に起きるが早いのでトイレに行ってまた寝る。
8:00 起床。奇跡的に背中も腰も痛くない。どうしたのだ。 外は大雨だが洗濯日なので洗濯機を回す。乾燥時間を試験的に倍にする。 テレビを点けて納豆とバターロールを食う。 土曜なので仕事探しを気にする必要がなく気が楽だ。
Advanced Bash-Scripting Guide を読む。 その過程でハードディスクの使用率が 25 パーと妙に高いことが発覚。買って一年も経っていないのにだ。 調べると Windows Update のファイルが圧迫しているらしい。 もう要らないので OS のクリナップツールで掃除。プログレスバーがなかなか短くならないので期待大。
13:00 雨がひたすら降っている。おやつの買い出しは億劫。
しばらくして傘とレインパンツ足ハメ装備で外出。隅田公園で用を足してから買い出しに行く。
14:25 ローソンストア 100 言問橋店でおやつを調達。234 円。
- 手巻きおにぎり焼鮭
- ロングウィンナーパン粒マスタード
- スイスロールコーヒー
徹子の部屋でも観るか。
17:00 外出。錦糸町へ直行。オリナス錦糸町の地下に移動。 タイトー F ステーションオリナス錦糸町店でゲームに興じる。生活保護費でいいのか。 悩みつつ熱くなって 5 クレも使った。
19:40 カスミオリナス錦糸町店で晩飯等を調達。やはりこの時間は安い。546 円。
- 青椒肉絲&麻婆豆腐丼
- 温玉冷やし讃岐
- 野菜ジュース
20:00 ビッグエー墨田業平店で食料続きを調達。127 円。
- 納豆 (3)
- シュークリーム
20:15 部屋に戻る。ちょっとテレビが面白かったが一拍置いて入浴。 朝空けた野菜ジュースのペットボトルに風呂掃除用の洗剤を詰める。半分しか埋まらない。
20:45 晩飯。ベランダの洗濯物が乾いていない。
22:00 電話ボックスへ移動してインターネットに接続。 今晩も特に用事がないので Twitter を見回る。
22:50 部屋に戻る。麻雀の練習。
23:50 消灯。
Programming Notes
Advanced Bash-Scripting Guide を読む。
- Chapter 28 Indirect References
eval newvar=\$$varnameのような技法がある。${!variable}
- Chapter 29
/devand/proc- 本題とははずれるがコマンド
dfでディスク消費率がわかる。 /devは物理デバイス、デバイスもどきのファイルからなる。mountコマンドと/etc/fstabファイルと関係がある。/dev/tcp/$URL/80などを指定してインターネットからファイルをダウンロードできる。 GET や HEAD などの HTTP リクエストをここにリダイレクトする。/dev/dspの実演コードがインパクトあり。シェルスクリプトで演奏ができるとは思わなかった。/procはファイルシステムもどき。面白い情報が得られる。cat /proc/cpuinfo | grep "model name"cat /proc/$PROCESS_ID/cmdline | xargs -0 echo/proc以下に何かを書くことは危険だ。
- 本題とははずれるがコマンド
- Chapter 30 Network Programming: Cygwin とインターネットのない孤島にいるため後回し。
- Chapter 31 Of Zeros and Nulls
/dev/nullは事実上書き込み専用のファイルだと考える。ブラックホール。/dev/nullを空ファイルのために用いることも考えられる。cat /dev/null > newfile: /dev/null > newfile: サブプロセスを生じない。
cat something &>/dev/nullのようにして stdout と stderr の両方を吸い込ませる。 リダイレクトを二つ書くのが面倒なので。ln -s /dev/null somethingという用例もある。ゴミ箱のようだ。-
/dev/zeroはバイナリー的にゼロのストリームを生じる。 やはりddコマンドでコピーする用例が挙げられる。dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks
- Chapter 32 Debugging
- 空白文字を含むファイルを削除する例はおもしろい。
- バグの分類もいい。
- スクリプトが syntax error を含む。
- スクリプトが期待通りに動作しない。
- スクリプトが期待通りに動作するのだが、副作用がある。
- シェルスクリプトにはデバッガーがないので、原始的なデバッグ技法を駆使するしかない。
- シェルのオプションを利用する。
set -OPTやset -o OPTNAMEなどで指定してもよい。-nオプションで構文チェックだけができる。-vオプションで実行するコマンドの直前に命令を出力する。-xオプションは実行直後に結果を出力する。-uオプションで未定義変数の参照を咎める。
- 関数として assert を自前で実装する。
LINEINFO,callerなど使えるものを使う。trapをうまく使う。trap 'command' EXITなどとする。- プログレスバーの例は正常終了と Ctrl+C の両方を試すこと。
- ユーザーシグナルなるものがある。
trap 'command' DEBUGというのもある。BASH_から始まる変数を参照するのもよい。
- Chapter 33 Options
- オフにするには
set +OPTやset +o OPTNAMEとする。
- オフにするには
- Chapter 34 Gotchas: 推奨されない practice 一覧
-を変数名や関数名に使用することは推奨されない。ファイル名と同じ感覚ではダメなのだ。- 文字列の比較演算子と数のそれとを混同しないように。
- 何度も言及しているが、子プロセスで変数を
exportしても親プロセスや、それより上には影響しない。 - Bash は文字列
//を正しく処理しない。例:cd //
- Chapter 35 Scripting With Style
- エラーコードを決めるのに
/usr/include/sysexit.hが参考になる。
- エラーコードを決めるのに
- Chapter 36 Miscellany
- 不要な
catに注意。 - パイプをうまく使って処理効率を上げる。
- Unicode サポートが要らないなら
LC_ALL=Cで処理効率を上げる。 exprよりも(( ... ))のほうが効率が良い。- 分岐の多い
if文よりもcase文。 - ファイル入出力を最小化すること。Bash はそれが特にうまくはない。
- スクリプトの先頭で
PATHとumaskをリセットすることは可搬性を上げる。 - 何かをパイプするときにはふつう
2>/dev/nullすること。
- 不要な
- Chapter 37 Bash, versions 2, 3, and 4
+=で文字列連結ができる。PATHの設定に有用。case文で;;&などが使える。coprocでコルーチンのようなものが定義できる。mapfileでファイルの中身を配列として参照できる。${var^},${var^^}で変数の一部または全部を大文字に変換する。${var,},${var,,}はその小文字版。{start..stop..step}globstarオプションを有効にすることで**がサブディレクトリーを見に行く。\u,\Uプレフィックスによる Unicode サポート。Python 風。- 配列、文字列の要素を指すのに負の数を許す。Python 風。
- Chapter 38 Endnotes: ここは読まなくていい