我正在尝试编写一个可以更好地与 KDE 配合使用的 Perl 脚本,kwrited
据我所知,该脚本连接到一个pts,并将它通过 KDE 系统托盘通知接收到的每一行都放入标题为“KDE write daemon”的行.
不幸的是,它对每一行都做了单独的通知,因此它会在常规旧write上用多行消息向系统托盘发送垃圾邮件,并且由于某种原因,它在使用wall时会切断整个消息的最后一行。单行消息也消失了。
我还希望它可以通过胖客户端在 LAN 上广播。在开始之前(当然,这需要 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
的地方,以下工作完美:
$ perl write.pl "Testing 1 2 3" /dev/pts/0