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>&1
Respuestas:
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