J'essaye d'écrire un script Perl qui fonctionnera mieux avec le kwrited
de KDE, qui, pour autant que je sache, est connecté à un pts et place chaque ligne reçoit via le système KDE des notifications avec le titre "KDE write daemon". Malheureusement, il fait une notification distincte pour chaque ligne, donc il spams up la barre d'état système avec des messages multilignes sur le vieux write et, pour une raison quelconque, il coupe toute la dernière ligne du message en utilisant wall. Les messages d'une ligne sont également englobés. Je souhaitais également faire en sorte qu'il puisse diffuser sur un réseau local avec des clients lourds. Avant de commencer (ce qui nécessiterait SSH, bien sûr), j'ai essayé de faire une version sans SSH pour m'assurer que cela fonctionne. Malheureusement, il ne fonctionne pas:Perl regex correspondant à la sortie de la commande `w -hs`
perl ./write.pl "Testing 1 2 3"
où ce qui suit est le contenu de ./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"
}
produit l'erreur suivante:
$ 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' > '
D'une certaine façon, les expressions régulières et/ou l'échappement arrière dans le traitement $possibledevice
ne fonctionne pas correctement, car où kwrited est connecté à /dev/pts/0
, les éléments suivants rks parfaitement:
$ perl write.pl "Testing 1 2 3" /dev/pts/0
L'ajout de plusieurs éléments dans les conditions de traitement des arguments l'a corrigé. Les expressions rationnelles ont eu besoin de quelques modifications, mais cela fonctionne maintenant. Merci beaucoup! – mmirate