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.
quelle
?
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)'
?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
Antworten:
Sie haben wahrscheinlich einige nicht druckbare Zeichen am Zeilenende (z. B. CRLF von Windows). Führen Sie Folgendes aus:
Auf einem Remote-Computer werden Ihnen alle Zeichen in Ihrem Skript angezeigt. Anschließend können Sie in ein Unix-ähnliches Format konvertieren
quelle
Notepad ++ hat sich als sehr nützlich erwiesen, um dies nach dem Versuch der Antwort zu korrigieren
da dies beim Konvertieren immer noch Fehler aufwies.
Über Notepad ++ gibt es die Option im Bearbeitungsmenü / EOL-Konvertierung / Unix / OSX-Format.
Immer noch sehr lernend, aber diese Methode löste mein Problem, aber die vorherige Lösung half dabei, herauszufinden, wo das Problem war.
quelle