¿Por qué el nombre del archivo contiene signos de interrogación cuando ejecuto un script en mi máquina remota?

10

Tengo un pequeño script que simplemente busca la fecha actual, ejecuta un script PHP y redirige la salida (y los errores) a un nombre de archivo que contiene la fecha actual.

DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1

Cuando ejecuto este script en mi máquina local (Windows 7, Aptana IDE), el script PHP funciona bien y el archivo de registro tiene el nombre de archivo esperado, por ejemplo 20140502.log.

Pero cuando inserto ese script a través de SFTP en mi máquina remota y ejecuto ese script, el nombre de archivo se ve así:

20140502?.log?

¿Cuál podría ser el problema? ¿Es este un error de búsqueda (por ejemplo, la codificación para cargas SFTP es ANSII, donde se espera UTF-8)? ¿O tengo que cambiar algo en el script mismo?

Información sobre el sistema / shell:

[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

Dato curioso: si ese script es llamado por un cronjob, los signos de interrogación no aparecen. Solo si ejecuto manualmente el script.

Gottlieb Notschnabel
fuente
Por lo general, ?indica que no se puede mostrar un carácter. Ciertamente suena como una diferencia de codificación. ¿Nos puede dar la salida de env|grep -E '(LC|LANG)'?
0xC0000022L
@ 0xC0000022L La salida es LANG=en_US.UTF-8.
Gottlieb Notschnabel
Perdón por no estar claro. Me refería a la salida en ambos extremos.
0xC0000022L
Perdón por perder eso ... Desafortunadamente este comando no muestra nada en Windoze: /
Gottlieb Notschnabel
1
¿Eres consciente de que esta secuencia de redirecciones ( 2>&1 >> $FILE) envía stderr al terminal y stdout al archivo? Si desea que stderr vaya también al archivo, necesita>> $FILE 2>&1
glenn jackman

Respuestas:

17

Probablemente tenga algunos caracteres no imprimibles al final de las líneas (por ejemplo, CRLF de Windows), ejecute:

cat -A scriptname

en una máquina remota, te mostrará todos los personajes en tu script. Luego, puede convertir a un formato similar a Unix ejecutando

dos2unix scriptname
fazie
fuente
3

Notepad ++ ++ es muy útil para corregir esto después de intentar la respuesta

cat -A scriptname>

dos2unix scriptname

ya que esto todavía presentaba errores al intentar convertir.

A través de Notepad ++, existe la opción en el menú de edición / Conversión EOL / Formato Unix / OSX.

Todavía aprendía mucho, pero este método resolvió mi problema, sin embargo, la solución anterior ayudó a encontrar dónde estaba el problema.

Phoe
fuente