Perché il nome file contiene punti interrogativi quando eseguo uno script sul mio computer remoto?


10

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.


Di solito ?indica che un personaggio non può essere visualizzato. Certamente suona come una differenza di codifica. Puoi darci l'output di env|grep -E '(LC|LANG)'?
0xC0000022L

@ 0xC0000022L L'output è LANG=en_US.UTF-8.
Gottlieb Notschnabel,

scusa per non essere chiaro. Intendevo l'uscita su entrambe le estremità.
0xC0000022L

Scusa se mi manca ... Purtroppo questo comando non
emette

1
Sei a conoscenza del fatto che questa sequenza di reindirizzamenti ( 2>&1 >> $FILE) invia stderr al terminale e stdout al file? Se vuoi che anche stderr vada nel file, devi>> $FILE 2>&1
Glenn Jackman,

Risposte:


17

Probabilmente hai alcuni caratteri non stampabili alla fine delle righe (es. CRLF da Windows), esegui:

cat -A scriptname

sulla macchina remota, ti mostrerà tutti i personaggi nella tua sceneggiatura. Quindi, puoi convertire in un formato simile a unix in esecuzione

dos2unix scriptname

3

Trovato Notepad ++ per essere molto utile per correggere questo dopo aver tentato la risposta

cat -A scriptname>

dos2unix scriptname

in quanto ciò presentava ancora errori durante il tentativo di conversione.

Tramite Notepad ++ c'è l'opzione nel menu di modifica / Conversione EOL / Formato Unix / OSX.

Sono ancora uno studente, ma questo metodo ha risolto il mio problema, tuttavia la soluzione precedente ha aiutato a trovare dove fosse il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.