script88
@script88

Perl`овщики помогите со скриптом

Сам скриптик
#!/usr/bin/perl

print "Host: ";
$DBhost = <STDIN>;

print "User: ";
$DBuser = <STDIN>;

print "Pass: ";
$DBpass = <STDIN>;

print "DBname: ";
$DBname = <STDIN>;

$Date = `date +%d-%m-%Y-%H.%M`;

$log = "Backup.'$DBname'.'$Date'.txt";

system "echo '$log' > temp.log";

После запуска и ввода данных, инфа записывается в лог,
при просмотре видно что после каждого ввода происходит перевод каретки:

sh: line 1: .09-07-2012-14.56: command not found
sh: line 2: .txt: command not found

Как этого избежать?
  • Вопрос задан
  • 2580 просмотров
Решения вопроса 1
kafeman
@kafeman
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Bambr
@Bambr
Скажите, а на кой черт вам перл, если Вы на нем пишете как на баше?

$Date = `date +%d-%m-%Y-%H.%M`;
use POSIX 'strftime';
$Date = strftime('%d-%m-%Y-%H.%M', localtime);

$log = «Backup.'$DBname'.'$Date'.txt»;
Можно воспользоваться советом выше про chomp, это правильнее. А можно выкосить все переводы строк уже из собранной переменной $log, в данном случае это чуть короче:
$log =~ s/[\r\n]//g;

system «echo '$log' > temp.log»;
open my $fd, ">", «temp.log» or die «Can't open temp.log: $!»;
print $fd $log;
close $fd;

Да, это явно длиннее, но и намного эффективнее. Форкать процесс чтобы узнать дату или записать строчку в файл, это как-то совсем грустно…
Ответ написан
Комментировать
FreeTibet
@FreeTibet
dharma supplier
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы