私は、KDEでよりうまく機能するPerlスクリプトを作成しようとしていますkwrited
。これは、私が知る限り、ptsに接続され、KDEシステムトレイ通知を介して受信したすべての行に「KDE書き込みデーモン」というタイトルを付けます。 。
残念ながら、行ごとに個別の通知を行うため、通常の古い書き込みで複数行のメッセージがシステムトレイにスパム送信され、 wallを使用すると、何らかの理由でメッセージの最後の行全体が切断されます。1行のメッセージも消え去ります。
また、シッククライアントを使用する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