Ho un piccolo script che recupera semplicemente la data corrente, esegue uno script PHP e reindirizza l'output (e gli errori) su un nome file contenente la data corrente.
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
Quando eseguo questo script sul mio computer locale (Windows 7, Aptana IDE), lo script PHP funziona correttamente e il file di registro ha il nome file previsto, ad es 20140502.log
.
Ma quando invio quello script tramite SFTP al mio computer remoto ed eseguo quello script, il nome del file appare così:
20140502?.log?
Quale potrebbe essere il problema? Si tratta di un errore di codifica (ad es. La codifica per i caricamenti SFTP è ANSII, dove è previsto UTF-8)? O devo cambiare qualcosa nello script stesso?
Informazioni su sistema / shell:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Curiosità: se lo script viene chiamato da un cronjob, i punti interrogativi non si verificano. Solo se eseguo manualmente lo script.
LANG=en_US.UTF-8
.
2>&1 >> $FILE
) invia stderr al terminale e stdout al file? Se vuoi che anche stderr vada nel file, devi>> $FILE 2>&1
?
indica che un personaggio non può essere visualizzato. Certamente suona come una differenza di codifica. Puoi darci l'output dienv|grep -E '(LC|LANG)'
?