Ich habe ein winziges Skript, das einfach das aktuelle Datum abruft, ein PHP-Skript ausführt und die Ausgabe (und Fehler) in einen Dateinamen umleitet, der das aktuelle Datum enthält.
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
Wenn ich dieses Skript auf meinem lokalen Computer (Windows 7, Aptana IDE) ausführe, funktioniert das PHP-Skript einwandfrei und die Protokolldatei hat den erwarteten Dateinamen, z 20140502.log
.
Wenn ich dieses Skript jedoch über SFTP auf meinen Remotecomputer übertrage und dieses Skript ausführe, sieht der Dateiname folgendermaßen aus:
20140502?.log?
Was könnte das Problem sein? Ist dies ein abschließender Fehler (z. B. ist die Codierung für SFTP-Uploads ANSII, wobei UTF-8 erwartet wird)? Oder muss ich etwas im Skript selbst ändern?
Informationen zu System / Shell:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Lustige Tatsache: Wenn dieses Skript von einem Cronjob aufgerufen wird, treten die Fragezeichen nicht auf. Nur wenn ich das Skript manuell ausführe.
LANG=en_US.UTF-8
.
2>&1 >> $FILE
) stderr an das Terminal und stdout an die Datei sendet? Wenn Sie möchten, dass stderr auch in die Datei geht, brauchen Sie>> $FILE 2>&1
?
an, dass ein Zeichen nicht angezeigt werden kann. Klingt sicherlich nach einem Kodierungsunterschied. Können Sie uns die Ausgabe von gebenenv|grep -E '(LC|LANG)'
?