Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用udev规则操纵内核设备名称_Linux_Bash_Device_Udev - Fatal编程技术网

Linux 使用udev规则操纵内核设备名称

Linux 使用udev规则操纵内核设备名称,linux,bash,device,udev,Linux,Bash,Device,Udev,我有一个bash脚本,它接受一个内核设备名作为参数,并输出一个可以用作新内核设备名的新字符串 Example: bash myScript sda output: sdaa 为此,我使用自定义udev规则 我不知道如何将参数传递到bash脚本中,并使用udev规则捕获结果输出 以下是我尝试过的一些规则 KERNEL=="sda", RUN+="/bin/bash /etc/udev/myScript '%E{KERNEL}'", NAME="%c" KERNEL=="sda", IMPOR

我有一个bash脚本,它接受一个内核设备名作为参数,并输出一个可以用作新内核设备名的新字符串

Example: 
bash myScript sda
output: sdaa
为此,我使用自定义udev规则

我不知道如何将参数传递到bash脚本中,并使用udev规则捕获结果输出

以下是我尝试过的一些规则

KERNEL=="sda", RUN+="/bin/bash /etc/udev/myScript '%E{KERNEL}'", NAME="%c"

KERNEL=="sda", IMPORT{program}="/bin/bash /etc/udev/myScript --export %k", NAME="%c"

KERNEL=="sda", IMPORT{program}="/bin/bash /etc/udev/myScript --import %k --export %c", NAME="%c"

我使用回显将字符串输出到标准输出。

设备属性可以通过设备属性(%k-设备内核名称,%p-设备的devpath)传递到脚本。有关所有可用的设备属性,请参阅udev的手册页

shell脚本的std输出由“%c”提供给udev规则。 .

这个规则怎么样:

KERNEL=="sda", RUN+="/bin/bash /etc/udev/myScript %k", NAME="%c"

无法更改设备节点的名称。只能创建其他符号链接

如果将值指定给
名称
键,则只能更改网络接口的名称


看。旧版也一样

这也不起作用/dev/sda不再位于/dev/下。这意味着脚本的某些部分做了一些工作,但没有创建/dev/sdaa。我的脚本很简单,只包含一行,echo
echo$1|sed“s/${1:2:1}/${1:2:1}${1:2:1}/”
通过更改udev的日志级别来检查是否可以找到任何有用的日志。udevadm control--log priority=debuginitly,只需从脚本中输出一些常量,看看它是否更改了设备名称。如果我将sda的名称更改为sdb,我将看不到sda,而只看到sdb。这意味着sda已成为sdb。但如果我尝试将sda更改为类似备份的内容,则在启用调试日志后,/dev/found/udev相关日志(/var/log/messages)下看不到备份?删除了关于服务器故障的重复问题