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.
LANG=en_US.UTF-8.
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
?bir karakterin görüntülenemediğini gösterir. Kesinlikle bir kodlama farkı gibi geliyor. Bize çıktı verebilir misinizenv|grep -E '(LC|LANG)'?