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.
fuente

?indica que no se puede mostrar un carácter. Ciertamente suena como una diferencia de codificación. ¿Nos puede dar la salida deenv|grep -E '(LC|LANG)'?LANG=en_US.UTF-8.2>&1 >> $FILE) envía stderr al terminal y stdout al archivo? Si desea que stderr vaya también al archivo, necesita>> $FILE 2>&1Respuestas:
Probablemente tenga algunos caracteres no imprimibles al final de las líneas (por ejemplo, CRLF de Windows), ejecute:
en una máquina remota, te mostrará todos los personajes en tu script. Luego, puede convertir a un formato similar a Unix ejecutando
fuente
Notepad ++ ++ es muy útil para corregir esto después de intentar la respuesta
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.
fuente