我正在尝试编写一个Perl脚本,它可以更好地处理KDE的kwrited
,据我所知,它可以连接到pts,并将每一行通过KDE系统托盘接收标题为“KDE写入守护程序”的通知。`w -hs`命令的Perl正则表达式匹配输出
不幸的是,它使每行一个单独的通知,所以修建垃圾了多邮件系统托盘上普通的旧write,以及由于某种原因,使用wall时切断消息的整个最后一行。单线消息也是流行的。
我也希望能够通过局域网与广泛的客户端进行广播。在开始之前(当然需要SSH),我尝试制作一个无SSH的版本以确保它可以正常工作。不幸的是,它并不:
perl ./write.pl "Testing 1 2 3"
,其中以下是./write.pl
内容:
#!/usr/bin/perl
use strict;
use warnings;
my $message = "";
my $device = "";
my $possibledevice = '`w -hs | grep "/usr/bin/kwrited"`'; #Where is kwrited?
$possibledevice =~ s/^[^\t][\t]//;
$possibledevice =~ s/[\t][^\t][\t ]\/usr\/bin\/kwrited$//;
$possibledevice = '/dev/'.$possibledevice;
unless ($possibledevice eq "") {
$device = $possibledevice;
}
if ($ARGV[0] ne "") {
$message = $ARGV[0];
$device = $ARGV[1];
}
else {
$device = $ARGV[0] unless $ARGV[0] eq "";
while (<STDIN>) {
chomp;
$message .= <STDIN>;
}
}
if ($message ne "") {
system "echo \'$message\' > $device";
}
else {
print "Error: empty message"
}
产生以下错误:
$ perl write.pl "Testing 1 2 3"
Use of uninitialized value $device in concatenation (.) or string at write.pl line 29.
sh: -c: line 0: syntax error near unexpected token `newline'
sh: -c: line 0: `echo 'foo' > '
不知何故,正则表达式和/或在处理$possibledevice
中的反引号溢出无法正常工作,因为其中kwrited连接到/dev/pts/0
,下面的wo rks完美:
$ perl write.pl "Testing 1 2 3" /dev/pts/0
在参数处理条件中添加更多内容修复了它。正则表达式确实需要一些修改,但它现在起作用。非常感谢你! – mmirate 2010-06-06 19:28:03