Por que o nome do arquivo contém pontos de interrogação quando executo um script em minha máquina remota?

6

Eu tenho um pequeno script que simplesmente busca a data atual, executa um script PHP e redireciona a saída (e erros) para um nome de arquivo contendo a data atual.

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

Quando executo esse script em minha máquina local (Windows 7, Aptana IDE), o script PHP funciona bem e o arquivo de log tem o nome do arquivo esperado, por exemplo, 20140502.log .

Mas quando eu envio esse script via SFTP para minha máquina remota e executo esse script, o nome do arquivo é assim:

20140502?.log?

Qual pode ser o problema? Isso é um erro de ativação (por exemplo, a codificação para uploads de SFTP é ANSII, em que o UTF-8 é esperado)? Ou eu tenho que mudar alguma coisa no próprio script?

Informações sobre o sistema / shell:

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

Fato engraçado: se esse script é chamado por um cronjob, os pontos de interrogação não ocorrem. Apenas se eu executar manualmente o script.

    
por Gottlieb Notschnabel 02.05.2014 / 15:00

2 respostas

12

Você provavelmente tem alguns caracteres não imprimíveis no final das linhas (por exemplo, CRLF do Windows), execute:

cat -A scriptname

na máquina remota, mostra todos os caracteres do seu script. Então, você pode converter para um formato similar ao unix rodando

dos2unix scriptname
    
por 02.05.2014 / 15:27
2

Encontrado o Notepad ++ para ser muito útil para corrigir isso depois de tentar a resposta

cat -A scriptname>

dos2unix scriptname

como isso ainda apresenta erros ao tentar converter.

Através do Notepad ++, existe a opção no menu de edição / Conversão EOL / Formato Unix / OSX.

Ainda é muito mais um aluno, mas esse método resolveu meu problema, mas a solução anterior ajudou a descobrir onde estava o problema.

    
por 14.04.2016 / 19:57