TS-7400 ARM SBC を起動するスクリプトを作成していますが、SD カードにある構成ファイルを介して渡されたいくつかの引数とオプションのカーネル パラメーターを読み取ることができるようにしたいと考えています。構成ファイルを呼び出し、ペアsyscfg.conf
を使用して編成されてKEYWORD=value
いますが、カーネル引数自体は同じ構文を持つことができるため、次のように値を区切ることを考えました:
CMDLINE_ARGS="elevator=noop scheduler=noop"
通常の bash でテストしているときに、次のいずれかの方法を使用して、カーネル コマンド ライン引数を分離することができました。
$ grep CMDLINE_ARGS syscfg.conf | sed 's/CMDLINE_ARGS="\(.*\)"/\1/'
elevator=noop scheduler=noop
$ grep CMDLINE_ARGS syscfg.conf | cut -d'"' -f2
elevator=noop scheduler=noop
$ awk -F'"' '/CMDLINE_ARGS/ {print $2}' syscfg.conf
elevator=noop scheduler=noop
ただし、カスタム カーネルまたはアプリケーションを起動するために使用されるビジーボックス ベースの簡易 Linux である TS-LINUX で実行すると、通常の bash のようには機能しません。awk
コマンドは存在しませんが、cut
バージョンは正常に機能しましたが、次のようsed
に返されます。
CMDLINE_ARGS="elevator=noop scheduler=noop"
busybox のsed
実装がこのように動作するのはなぜですか? 文字列全体を返す代わりに、区切り\1
文字間の任意の文字の " " グループ (正規表現)のみを出力することを期待していました。bash のように動作させる方法はありますか?"
"(.*)"