来自udev规则的参数不会传入perl脚本

我试图创build一个隐藏大小小于64 GB块设备(即USB驱动器)的udev规则

规则如下所示:

BUS=="usb", SUBSYSTEM=="block", ACTION=="add", PROGRAM="/data/diskSizeCheck.pl %k", RESULT!="ok", ENV{UDISKS_PRESENTATION_HIDE}="1", GOTO="usb_mount_end" 

其中usb_mount_end只是我的规则文件末尾的一个标签。 %k应该是设备内核(即sdb)。 但是,即使当我将硬编码“sdb”作为参数时,该参数也不会将其写入到我的perl脚本中,即使大小足够大,磁盘也总是会失败。 当我通过命令行传递sdb时,它可以工作。

这是我使用的Perl脚本:

 #!/usr/bin/perl use strict; my $MINIMUM_DISK_SIZE = 64000000000; my $kernel = $ARGV[0]; my $diskSize = `blockdev --getsize64 /dev/$kernel`; chomp($diskSize); if ($diskSize > $MINIMUM_DISK_SIZE) { print "ok"; } else { print "no"; } 

脚本被标记为可执行文件和所有内容,但是当我将$kernel写入文本文件时,文本文件变为空白,导致我相信variables永远不会被传入。

我如何将%k传递给我的Perl脚本?

编辑添加:我正在运行一切作为根。

编辑进一步添加:我认为真正的问题是RESULT由于某种原因没有正确捕获我的脚本的输出。

运用

 KERNEL=="sdc", SUBSYSTEMS=="block", ACTION=="add", PROGRAM="/usr/local/diskSizeCheck.pl %k", RESULT!="ok", ENV{UDISKS_PRESENTATION_HIDE}="1" 

使用diskSizeCheck.pl:

 #!/usr/bin/perl use strict; use warnings; open FH,">/tmp/diskSizeCheck"; print FH "Disk Size Check\n"; my $MINIMUM_DISK_SIZE = 64000000000; my $kernel = $ARGV[0]; my $diskSize = `sudo blockdev --getsize64 /dev/$kernel`; chomp($diskSize); print FH "kernel = $kernel, $diskSize\n"; if ($diskSize > $MINIMUM_DISK_SIZE) { print FH "ok\n"; } else { print FH "no\n"; } 

在插入一个USB棒我得到/ tmp / diskSpaceSize:

 Disk Size Check sdc, 2005925888 no