2 votes

règles udev avec une expression mathématique

J'ai une règle udev qui crée un lien symbolique pour les périphériques série (ports série USB) en utilisant une expression comme celle-ci : SYMLINK+="MyDevice_%n" . Le %n attribue le numéro de nœud du périphérique système en commençant par 0. Y a-t-il un moyen de modifier la numérotation - au lieu de %n, peut-être %n+1 ? Les expressions mathématiques ne fonctionnent pas dans une règle udev. Je pourrais être en mesure d'utiliser un script bash pour faire l'équivalent de echo $((%n+1)) mais je ne sais pas comment le faire dans une règle udev. Des suggestions utiles ?

3voto

JimFred Points 1560

Utilisez le champ PROGRAM des règles udev pour exécuter une expression d'écho /bin/sh et capturer le résultat en utilisant %c, comme ceci...

PROGRAM="/bin/sh -c 'echo $((%n+1))'", SYMLINK+="MyDevice_%c"

Le lien symbolique résultant aura l'équivalent de MyDevice_$((%n+1)) o MyDevice_1 si %n est égal à zéro. La construction $(()) est appelée "expansion arithmétique" et fait en sorte que le contenu soit évalué comme une expression entière. C'est un élément syntaxique du Shell.

0 votes

Dans les versions plus récentes de udev, vous devez échapper le caractère $ comme $$ . Je ne sais pas quand cela a changé. Voir aussi freedesktop.org/software/systemd/man/udev.html#%24%24

1voto

PooSH Points 111

Puisque vous ne voulez pas commencer à partir MyDevice_0 utiliser ++%n pour démarrer le compteur à partir de 1 ( MyDevice_1 )

PROGRAM="/bin/sh -c 'echo $((++%n))'", SYMLINK+="MyDevice_%c"

2 votes

Peut-être voulez-vous dire "démarrer le compteur à partir de 1" ? Commencer à 0 est exactement ce que l'OP ne veut pas :)

0 votes

Oups, j'ai mal lu l'OP. Je m'en excuse. Oui, il n'est pas nécessaire d'utiliser PROGRAM pour commencer avec 0 puisque vous pouvez simplement utiliser %n

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X