2012-06-17 14 views
11

Mam raport o błędach od wiarygodnej osoby, która na Cygwin i Perl 5.14.2, używając przełącznika perla -i bez wartości tworzy plik kopii zapasowej .bak. Nie powinien zgodnie z dokumentacją w perlrun:Czy plik -i bez argumentu perla tworzy plik kopii zapasowej na Cygwin?

If no extension is supplied, no backup is made and the current 
file is overwritten. 

nie mam dostępu do Cygwin w tej chwili. Czy ktoś inny widzi to zachowanie? Możesz to wyjaśnić? Czy jest coś na temat tworzenia pliku kopii zapasowej, który powinien być tylko plikiem tymczasowym i nie można go usunąć?

Oto kroki, które proponuję odtworzyć. Pamiętaj, że to jest dla Cygwin:

  1. tworzyć i zmieniać w pustego katalogu
  2. Utwórz plik tekstowy w tym katalogu. Zawartość nie jest ważne
  3. Run perl -p -i -e 's/perl/Perl/g' filename
  4. Sprawdź pliku .bak gdy skończysz

zapisać odpowiedzi na wyjaśnienie tego, co może się dziać, jeśli okaże się, że plik kopii zapasowej. Uwzględnienie wcześniejszego komentarza "Tak widzę" lub "Nie, nie mogę go odtworzyć" może być nieformalną ankietą.

+0

Tak, widzę, że –

+0

Nie, nie można odtworzyć to –

+0

Build Cygwin Perl powoduje utworzenia '.bak' dla mnie. W rzeczywistości '$^I' zawiera' .bak'. Emulacja cygwina na unixie najwyraźniej nie idzie tak daleko, jak dodanie obsługi anonimowych plików. – ikegami

Odpowiedz

13

perldoc perlcygwin sayeth (edycja dla jasności):

Z powodu ograniczeń systemu Windows-owski, inplace edycję plików z perl -i musi stworzyć zapasową każdego edytowanego pliku. Dlatego Perl automatycznie dodaje przyrostek .bak - jako, ale wywoływany przez perl -i.bak - jeśli używasz perl -i bez jawnego rozszerzenia kopii zapasowej.

Prawdopodobnie ta informacja powinna być również w perlport.

+0

"Tak, widzę to." w wielu wersjach Cygwin od 5.8.4 do 5.15.6 – mob

+0

Aw, nie czuję się głupio. Nigdy nawet nie pomyślałem, żeby szukać tego pliku. –

1

Tak. Na przykład:

# show we're in cygwin 
% uname -a 
CYGWIN_NT-6.1-WOW64 xzodin 1.7.15(0.260/5/3) 2012-05-09 10:25 i686 Cygwin 
    # show that directory is empty 
% ls 
    # create a file 
% touch foo 
    # invoke 'perl -pi' (but do nothing) 
% perl -pi -e "" foo 
    # show that a backup file with extension '.bak' is created. 
% ls 
foo foo.bak 
Powiązane problemy