udev에서 이름으로 변수에 액세스하시겠습니까?

udev에서 이름으로 변수에 액세스하시겠습니까?

파티션 유형에 따라 소유권과 권한을 설정할 수 있도록 udev(마스터 부트 레코드의 1바이트 필드)에서 파티션 유형에 액세스하려고 합니다. 물론 문제는 소유자 등을 설정하려는 동안 sda1파티션 테이블이 실제로 상위 테이블의 일부라는 것입니다 sda. (물론 실제로는 sda뿐만 아니라 많은 디스크가 존재합니다)

각 디스크의 udev 데이터베이스 항목으로 가져온 모든 기본 파티션의 파티션 유형을 가져왔습니다. 그러면 각 디스크에 가능한 각 기본 파티션에 하나씩 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", ...

이를 수행할 수 있는 좋은 방법이 있습니까?

관련 정보