liblinuxlive考察(その1)
SLAXの特徴のひとつに、複雑なスクリプトがある。もちろん、Tomasがスクリプトの達人だからこその賜物だが、SLAXがシンプルなのは、この複雑なスクリプトに支えられている。このスクリプトのライブラリが、liblinuxliveである。liblinuxliveに、cmdline_valueというものがある。名称から想像できるように、起動時のブートローダのメニューで読み込まれる行は/proc/cmdlineに記録されており、これから値を取り出すというもの。そのメインの処理は、次の1行。
egrep -o "(^|[[:space:]])$1=[^[:space:]]+" /proc/cmdline | cut -d "=" -f 2- | tail -n 1
これを解釈すると、まずはパイプがあるので簡単に3つに分解できる。
- egrep -o "(^|:space:)$1=[^[:space:]]+" /proc/cmdline
- cut -d "=" -f 2-
- tail -n 1
さあ、これからがいきなり難解。egrepが何をしているかが、まったく分からず。そんなときは、実際に動かしてみるのがいちばん。どうやって動かそう...。しばらく考えた結果、こんな感じでtestスクリプトを作ってみた。
#!/bin/sh egrep -o "(^|[[:space:]])$1=[^[:space:]]+" /proc/cmdline
これで、cmdlineにある"変数=値"の変数を引数として指定すると、その式を前にある空白を含めて文字列として取ってくる。それが分かったところで、この"(^|:space:)$1=[^[:space:]]+"の解釈ができないことに気がつく。やっぱり正規表現の勉強は必要か。