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