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 que contém a data atual.
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
Quando executo esse script na minha máquina local (Windows 7, Aptana IDE), o script PHP funciona bem e o arquivo de log tem o nome de 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 fica assim:
20140502?.log?
Qual pode ser o problema? Isso é um erro de ligação (por exemplo, a codificação para uploads de SFTP é ANSII, onde UTF-8 é esperado)? Ou 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 for chamado por um cronjob, os pontos de interrogação não ocorrerão. Somente se eu executar manualmente o script.
fonte
?
indica que um caractere não pode ser exibido. Certamente soa como uma diferença de codificação. Você pode nos dar a saída deenv|grep -E '(LC|LANG)'
?LANG=en_US.UTF-8
.2>&1 >> $FILE
) envia stderr para o terminal e stdout para o arquivo? Se você quiser stderr para ir para o arquivo, bem como, o que você precisa>> $FILE 2>&1
Respostas:
Você provavelmente possui alguns caracteres não imprimíveis no final das linhas (por exemplo, CRLF do Windows), execute:
na máquina remota, ele mostra todos os caracteres em seu script. Em seguida, você pode converter para o formato unix, executando
fonte
O Notepad ++ foi muito útil para corrigir isso depois de tentar a resposta
pois isso ainda apresentava erros ao tentar converter.
Através do Notepad ++, existe a opção no menu editar / Conversão EOL / Formato Unix / OSX.
Ainda aprendi muito, mas esse método resolveu meu problema, no entanto, a solução anterior ajudou a encontrar onde estava o problema.
fonte