Uzak makinemde bir komut dosyası çalıştırdığımda dosya adı neden soru işaretleri içeriyor?


10

Ben sadece geçerli tarihi getirir küçük bir komut dosyası var, bir PHP komut dosyası çalıştırır ve çıktı (ve hatalar) geçerli tarihi içeren bir dosya adına yönlendirir.

DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1

Bu komut dosyasını yerel makinemde (Windows 7, Aptana IDE) çalıştırdığımda, PHP komut dosyası iyi çalışıyor ve günlük dosyasının beklenen dosya adı var, örn 20140502.log.

Ancak bu komut dosyasını SFTP üzerinden uzak makineme aktarıp komut dosyasını yürüttüğümde dosya adı şöyle görünüyor:

20140502?.log?

Sorun ne olabilir? Bu bir canlandırma hatası mı (örneğin SFTP yüklemeleri için kodlama ANFII, UTF-8 bekleniyor)? Yoksa betiğin kendisinde bir şey değiştirmek zorunda mıyım?

Sistem / kabuk hakkında bilgi:

[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

Komik gerçek: Bu komut dosyası bir cronjob tarafından çağrılırsa, soru işaretleri oluşmaz. Sadece komut dosyasını el ile çalıştırırsam.


Genellikle ?bir karakterin görüntülenemediğini gösterir. Kesinlikle bir kodlama farkı gibi geliyor. Bize çıktı verebilir misiniz env|grep -E '(LC|LANG)'?
0xC0000022L

@ 0xC0000022L Çıktı LANG=en_US.UTF-8.
Gottlieb Notschnabel

belirsiz olduğum için üzgünüm. Her iki uçtan da çıktı demek istedim.
0xC0000022L

Bunu özür dilerim ... Maalesef bu komut Windoze'de hiçbir şey çıktı: /
Gottlieb Notschnabel

1
Bu yeniden yönlendirme dizisinin ( 2>&1 >> $FILE) terminale stderr ve dosyaya stdout gönderdiğinin farkında mısınız ? Stderr'nin dosyaya da gitmesini istiyorsanız, ihtiyacınız olan>> $FILE 2>&1
glenn jackman

Yanıtlar:


17

Muhtemelen satırların sonunda yazdırılamayan bazı karakterleriniz var (örn. Windows'tan CRLF), şunu çalıştırın:

cat -A scriptname

uzak makinede, senaryonuzdaki tüm karakterleri gösterir. Ardından, çalışan unix benzeri biçime dönüştürebilirsiniz

dos2unix scriptname

3

Notepad ++, yanıtı denedikten sonra bunu düzeltmek için çok yararlı bulundu

cat -A

kod adı > dos2unix kod adı

çünkü bu, dönüştürmeye çalışırken hala hatalar sundu.

Notepad ++ ile düzenleme menüsü / EOL Dönüştürme / Unix / OSX Formatı seçeneği vardır.

Hâlâ çok öğrenci ama bu yöntem sorunumu çözdü, ancak önceki çözüm sorunun nerede olduğunu bulmaya yardımcı oldu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.