Menu główne

- Strona główna
- darmowe programy
- Porady
- programowanie
- inne rzeczy
- kontakt

Kategorie porad

- bezpieczeństwo
- (e)-biznes
- telefonia
- maile, spam
- dla webmasterów
- pozostałe

 

 

Tutaj jestes: Jelcyn.com -> porady dla posiadaczy komputerów

Linux, pliki SH i problemy z obsługą tych plików

REKLAMA:
Jeśli chcesz się nauczyć tworzyć strony internetowe, a nie masz o tym pojęcia wejdź na bezpłatny blog www.VideoWebmaster.pl

Jeśli już potrafisz tworzyć strony internetowe, wejdź na blog z poradami dla średnio-zaawansowanych webmasterów www.PomocnikWebmastera.pl

Raz utworzyłem jakiś prosty plik sh (skrypt shella) pod linuxem, który utworzył kilka jakiś plików, które miał obrobić jakiś skrypt napisany w PHP. Załóżmy, że plik sh miał taką zawartość:

#!bin/bash
ls -l >1.txt
ls -l >2.txt
..coś tam jeszcze

No a skrypt w PHP miał za zadanie odczytać pliki 1.txt i 2.txt. Ale za "cholerę" ich nie chciał czytać. Błędów skrypcie na 100% nie było, pliki te były w tym samym katalogu co skrypt. Mało tego, wszedłem na serwer FTP i nie mogłem skasować tych plików za pomocą Total Commandera (mogłem skasować tylko za pomocą jakiegoś WebFTP'a). Postanowiłem utworzyć plik tar.gz, wrzucić go na dysk. No i winrar, który nie raz mi rozpakowywał pliki tar.gz tym razem odmówił posłuszeństwa! Nie mówił, że archiwum jest uszkodzone, ładnie widział jakie pliki wchodzą w skład archiwum, ale nie chciał ich rozpakować!

Zastanawiasz się, co było przyczyną problemu? Odpowiedź jest zaskakująca: plik sh napisałem pod Windowsem w programie EditPad. Pod windowsem koniec wiersza oznacza się symbolami CR LF (kod ASCII 13 i kod ASCII 10). Pod linuxem natomiast koniec wiersza oznacza się tylko symbolem LF (kod ASCII 10). Shell uznał, że nie tworzę pliku o nazwie 1.txt tylko 1.txtCR (CR to kod ASCII 13). Skrypt w PHP odwoływał się do pliku 1.txt a nie 1.txtCR, więc nie dziwne, że wystąpił błąd. A TotalCommander i WinRAR to programy windowsowe, pod windowsem pliki w nazwie nie mogą mieć kodu ASCII 13 i po prostu dla tych programów plik miał tak nietypową nazwę, że nie mogły go "obsłużyć".

Rozwiązanie problemu było proste: musiałem zadbać, aby pliki sh które tworzę miały koniec wiersza LF a nie tak jak to pod windowsem bywa CR LF. EditPad ma opcję zapisywania plików tekstowych w formacie Linuxowym, wystarczy z menu Convert wybrać opcję To Linux i od teraz już zawsze ten plik będzie miał entery zapisywane w podstaci kodu ASCII 10 (LF). Jak ponownie otworzysz ten plik w programie EditPad to on sam zorientuje się, że koniec wiersza to kod ASCII 10 i nie trzeba już będzie pamiętać o konwersji.

wstecz