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)'
?