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つに分解できる。

  1. egrep -o "(^|:space:)$1=[^[:space:]]+" /proc/cmdline
  2. cut -d "=" -f 2-
  3. tail -n 1

さあ、これからがいきなり難解。egrepが何をしているかが、まったく分からず。そんなときは、実際に動かしてみるのがいちばん。どうやって動かそう...。しばらく考えた結果、こんな感じでtestスクリプトを作ってみた。

#!/bin/sh
egrep -o "(^|[[:space:]])$1=[^[:space:]]+" /proc/cmdline

これで、cmdlineにある"変数=値"の変数を引数として指定すると、その式を前にある空白を含めて文字列として取ってくる。それが分かったところで、この"(^|:space:)$1=[^[:space:]]+"の解釈ができないことに気がつく。やっぱり正規表現の勉強は必要か。