Mam mały skrypt, który po prostu pobiera bieżącą datę, uruchamia skrypt PHP i przekierowuje dane wyjściowe (i błędy) do nazwy pliku zawierającej bieżącą datę.
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
Kiedy uruchamiam ten skrypt na moim komputerze lokalnym (Windows 7, Aptana IDE), skrypt PHP działa dobrze, a plik dziennika ma oczekiwaną nazwę pliku, np 20140502.log
.
Ale kiedy wypycham ten skrypt za pomocą SFTP na moją zdalną maszynę i wykonuję ten skrypt, nazwa pliku wygląda następująco:
20140502?.log?
Co może być problemem? Czy to błąd kodowania (np. Kodowanie dla przesyłania SFTP to ANSII, gdzie oczekuje się UTF-8)? Czy też muszę coś zmienić w samym skrypcie?
Informacje o systemie / powłoce:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Zabawny fakt: jeśli ten skrypt jest wywoływany przez cronjob, znaki zapytania nie występują. Tylko jeśli ręcznie uruchomię skrypt.
LANG=en_US.UTF-8
.
2>&1 >> $FILE
) wysyła stderr do terminala, a stdout do pliku? Jeśli chcesz, aby stderr również poszedł do pliku, potrzebujesz>> $FILE 2>&1
?
oznacza, że znak nie może zostać wyświetlony. Z pewnością brzmi jak różnica w kodowaniu. Czy możesz podać nam wynikenv|grep -E '(LC|LANG)'
?