2016-07-18 28 views
5

Miałem dość dziwny problem podczas generowania plików tekstowych przez skrypty powłoki linux. Sytuacja wygląda tak:Wiele plików wygenerowanych przez skrypt, tylko ostatni czytelny

Na mojej stacji Synology Disk Station wykonuję sh-script. Dostęp do lokalnej bazy danych mySQL przy użyciu użytkownika SQL do odczytu. Istnieje wiele połączeń (jedna linia na połączenie), a każdy zapisuje odebrane dane wyjściowe do pliku .csv w różnych lokalizacjach.

SH skrypt wygląda tak:

/some/path/create_lists.sh 

mysql --arguments </path/to/script1.sql> /path/to/outfile1.csv 
mysql --arguments </path/to/script2.sql> /path/to/outfile2.csv 
mysql --arguments </path/to/script3.sql> /path/to/outfile3.csv 
mysql --arguments </path/to/script4.sql> /path/to/outfile4.csv 

Korzystanie mój Windows PC Chcę uzyskać dostęp do tych plików.

Zasadniczo to już działa dobrze, ale w jakiś sposób tylko ostatni utworzony plik .csv jest bezpośrednio do odczytania przez MS Excel. W powyższym przykładzie plik outfile4.csv byłby jedynym czytelnym plikiem. Podczas zamiany wierszy 3 i 4 można odczytać plik outfile3.csv. Dla outfile4.csv zostanie utworzony nowy plik o dokładnie takiej samej nazwie, którego MS Excel nie będzie mógł otworzyć. Notepad ++ jest jednak w stanie go otworzyć.

Byłoby tak wyglądał w Eksploratorze Windows:

\\myNAS\path\to 

outfile4.csv (working) 
outfile4.csv (not working) 

Jak może istnieć dwa pliki o tej samej nazwie? I który działa, a drugi nie?

+2

I brawo do samodzielnego odpowiadania na problem nr 1 w skryptach cross-windows-linux ORAZ dla dobrze sformatowanego pytania. Teraz przenieś tę odpowiedź i zaakceptuj własną odpowiedź po 48 godzinach i zyskaj "cenne" punkty reputacji ;-). – shellter

+0

Zmieniono to, dzięki! – Marlon

Odpowiedz

5

Pisząc to pytanie, rozwiązałem je sam, ale nadal chcę je opublikować, aby inni mogli je zobaczyć.

Oto rozwiązanie: Napisałem skrypty na moim komputerze z systemem Windows za pomocą Notepad ++. Zapisałem je w dedykowanym folderze skryptów na moim NAS. Uruchamianie ich przez NAS wydawało się działać, ale był jeden drobny szczegół, który spowodował problem. Zwrot karetki.

Gdy uruchomiony wykorzystuje powrotu karetki (\ R)i Znak końca wiersza (\ n) powodując \ r \ n nowej linii, UNIX system oparty stosować tylko wysuwu (\ n)

pisząc skrypt na komputerze z systemem Windows, ja po prostu napisał:

mysql --arguments </path/to/script1.sql> /path/to/outfile1.csv\r\n 
mysql --arguments </path/to/script2.sql> /path/to/outfile2.csv\r\n 
mysql --arguments </path/to/script3.sql> /path/to/outfile3.csv\r\n 
mysql --arguments </path/to/script4.sql> /path/to/outfile4.csv 

Czytając fi le na linux następująco:

mysql --arguments </path/to/script1.sql> /path/to/outfile1.csv?\n 
mysql --arguments </path/to/script2.sql> /path/to/outfile2.csv?\n 
mysql --arguments </path/to/script3.sql> /path/to/outfile3.csv?\n 
mysql --arguments </path/to/script4.sql> /path/to/outfile4.csv 

Znalazłem to przez wymieniające zawartość folderu zawierającego poprzez SSH, który dał mi:

ls -alh /path/to 

... outfile4.csv 
... outfile4.csv? 

I mamy go! To jest powód, dla którego ostatni plik działa, a inne nie. Jest to również powód, dla którego mogą istnieć dwa pliki o "tej samej nazwie". Windows po prostu nie wyświetla znaku zapytania, który powoduje wiele zamieszania.

Więc jeśli ktokolwiek kiedykolwiek ma ten problem, może natknąć się na ten wątek i zaoszczędzić trochę swojego czasu.Sądzę, że jest to powszechna wiedza dla większości ludzi, ale nadal jestem początkującym z Linuksem, więc musiałem nauczyć się go na własnej skórze :)