udevから名前で変数にアクセスしますか?

udevから名前で変数にアクセスしますか?

パーティションの種類に応じて所有権と権限を設定できるように、udev(マスターブートレコードの1バイトフィールド)からパーティションタイプにアクセスしようとしています。もちろん、問題は、所有者などを設定しようとしている間に、sda1パーティションテーブルが実際に親テーブルの一部であることですsda。 (もちろん実際にはsdaだけでなく多くのディスクがあります)

各ディスクのudevデータベースエントリにインポートされたすべてのプライマリパーティションのパーティションタイプをインポートしました。これにより、各ディスクに可能な各1次パーティションに1つずつ4つのENVエントリが追加されます。以下のように見えますudevadmin info --query=all

E: LOCAL_PARTTYPE_P1=fd
E: LOCAL_PARTTYPE_P2=da
E: LOCAL_PARTTYPE_P3=00
E: LOCAL_PARTTYPE_P4=00

IMPORT{parent}その後、以下にある .partition number(1–4) を使用できますATTR{partition}。問題はタイプを取得することです。これ分割。

これをする必要があるようですが、うまくENV{LOCAL_PARTTYPE}="$env{LOCAL_PARTTYPE_P$attr{partition}}"いきません。先行 $ を削除すると、生成された名前が正確になり、udev は間接検索を実行しません。

私が見つけた唯一の方法は、次のような厄介な行です。これがIMPORT{program}="/bin/sh -c 'echo LOCAL_PARTTYPE=$$LOCAL_PARTTYPE_P$attr{partition}'"機能する理由は、ENVエントリがudevが実行するプログラムに環境変数として渡され、シェルがすぐに拡張してエコーできるようにするためです。

すべての可能なパーティション番号に対してすべてをコピーすることもできますが(プライマリパーティションのみを使用するために可能です)、気分が悪くなります。

$ATTR{partition}=="1", $ENV{LOCAL_PARTTYPE_P1}=="da", OWNER="grid", ...
$ATTR{partition}=="2", $ENV{LOCAL_PARTTYPE_P2}=="da", OWNER="grid", ...

これを行うための良い方法はありますか?

ベストアンサー1

おすすめ記事