Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Сервер накрылся, в чем проблема в команде?


Автор: Logo 22.10.2009, 09:47
Не знаю кто виноват, в команде ли проблема, или это сервак глюканул.
Ввел команду через SSH, и все, приконнектится нельзя, сайты не работают. Приходится восстанавливать из бекапов, часть работы потерянно.
Команда 
Код

perl -l?ne 'print `rm -r $_/*`' sites.txt

Выполнил в каталоге www, где сайты лежат, надо было очистить несколько папок от стандартных файлов, создаваемых при создании домена через панель. В sites.txt имена доменов. Во после выполнения он еще че-то несколько раз спросил, на что я ответил n. l ключ поставил с вопросом, т.к. не помню был он или нет. VDS, FreeBSD, под пользователем root.

Автор: amg 22.10.2009, 11:52
Цитата(Logo @  22.10.2009,  09:47 Найти цитируемый пост)
Не знаю кто виноват, в команде ли проблема, или это сервак глюканул.
Может, и в команде проблема. Нужно было сначала chomp сделать, а без него как поведет себя твой sh, когда встретит символы конца строки, которыми оканчиваются $_ -- фиг его знает. Худший вариант -- воспримет их как пробелы, и тогда rm -r ... /*

Автор: krypt3r 22.10.2009, 12:20
chomp делается при указании параметра -l
Сравните, команда
Код

$ perl -MO=Deparse -lne 'print "rm -r $_/*"' sites.txt

выведет
Код

BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
    chomp $_;
    print "rm -r $_/*";
}
-e syntax OK

а команда
Код

$ perl -MO=Deparse -ne 'print "rm -r $_/*"' sites.txt

выведет
Код

LINE: while (defined($_ = <ARGV>)) {
    print "rm -r $_/*";
}
-e syntax OK


Автор: KSURi 22.10.2009, 12:58
Цитата(Logo @  22.10.2009,  09:47 Найти цитируемый пост)
perl -l?ne 'print `rm -r $_/*`' sites.txt

Надо было так:
Код

perl -lne 'print `rm -r $_/*`' < sites.txt

Поскольку в данном случае $_ не инициализирована, то получается, что команда была rm -r /*

UPD: поспешил, оказывается -n работает и без <

Автор: amg 22.10.2009, 15:30
Цитата(krypt3r @  22.10.2009,  12:20 Найти цитируемый пост)
chomp делается при указании параметра -l
Спасибо за эту информацию!

Автор: Logo 22.10.2009, 17:39
Проверил, у меня перевод строки в $_ есть и с l, и без. Наверно, из-за него случилось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)