2

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 のように動作させる方法はありますか?""(.*)"

4

1 に答える 1