Я пытаюсь написать Perl-скрипт, который будет лучше работать с kwrited
в KDE, который, насколько я могу судить, связан с pts и помещает каждую полученную строку через Уведомления в системном трее KDE с заголовком «Демон записи KDE».
К сожалению, он делает отдельное уведомление для каждой строки, поэтому он забивает системный трей многострочными сообщениями на обычную старую запись и по какой-то причине обрезает всю последнюю строку сообщение при использовании 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
, следующее прекрасно работает:
$ perl write.pl "Testing 1 2 3" /dev/pts/0