来自 udev 规则的参数未传递到 perl 脚本
Parameter from udev rule not passing into perl script
我正在尝试创建一个 udev 规则来隐藏大小小于 64 GB 的块设备(即 USB 驱动器)
规则如下所示:
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
写入文本文件时,文本文件变成空白,让我相信变量从未传入。
如何将 %k
传递到我的 perl 脚本?
编辑添加:我 运行 一切都是 root。
编辑以进一步补充:我认为真正的问题是 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";
}
插入 U 盘时我得到 /tmp/diskSpaceSize:
Disk Size Check
sdc, 2005925888
no
我正在尝试创建一个 udev 规则来隐藏大小小于 64 GB 的块设备(即 USB 驱动器)
规则如下所示:
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
写入文本文件时,文本文件变成空白,让我相信变量从未传入。
如何将 %k
传递到我的 perl 脚本?
编辑添加:我 运行 一切都是 root。
编辑以进一步补充:我认为真正的问题是 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";
}
插入 U 盘时我得到 /tmp/diskSpaceSize:
Disk Size Check
sdc, 2005925888
no