Wykonują poniższy kod na moim komputerze:
File.open("text.bin","w"){|f| f.puts "XXX"}
dostaję bardzo niespodziewaną zawartość pliku “text.bin”:
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Jeśli nazwa pliku to np “text.txt” to wszystko działa jak należy.
Czy ktoś zauważył podobne zachowanie Rubiego?
ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
uname -a
Linux xps 2.6.30-gentoo-r4 #11 SMP Tue Dec 29 01:37:06 CET 2009 x86_64 Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz GenuineIntel GNU/Linux
Dodam, że na maszynie z Debianem błąd nie występuje.
faktycznie baaardzo dziwne… na maku (10.6 + ruby 1.9.2(na 1.8.7 tez) ) problemu nie ma. Może złoś buga?
Może znalazłeś easter egg?
Pod systemem MacOSX i ruby 1.9.3dev (2010-09-06 trunk 29190) [x86_64-darwin10.4.0] takiego zachowanie nie stwierdzam.
W sumie nie jest powiedziane, że to błąd/feature Rubiego - równie dobrze może być coś w wywołaniu systemowym.
Jest to o tyle dziwne, że jeśli jest write() to też jest taki wynik, ale mogę np. przekazać ten plik do Marshl.dump i wtedy wszystko jest ok.
Zgłoszę, jeśli ktoś potwierdzi, że u niego też występuje. W przeciwnym razie - tak jak pisałem, to może być błąd gdzieś indziej.
Może odpal ten skrypt przez strace i zobacz co się dzieje ? U mnie na Gentoo z 1.9.2-p0 nie ma takiego problemu.
Może zrób f.close? Ja na linux’ie bez tego zawsze mam jakiś cyrk ;]
To twoja maszyna w 100% czy to jakiś VPS ?
Jest w bloku, więc f.close robi się samo…
Tak moja maszynka i już wiem gdzie jest błąd
Zawartość przeglądałem przez
less abc.bin
Jak robię cat’em to wszystko jest ok
Dziwne, bo na innych systemach less nie bierze tego pod uwagę. No cóż, nie wpadłem wcześniej że tutaj może być problem.