quebra estranha de caminhos de arquivos

0

Eu tenho um script PHP executado na linha de comando em uma instância do AWS AMI Linux EC2 que ecoa quando está renomeando arquivos, e está encerrando o final da string de volta ao começo. A string deve ser algo assim:

renaming /var/scripts/_working_files/micros/import_micros_bkp/mytown/emp_def_out.sql to emp_def_out_mytown.sql

mas está saindo assim:

.sqlrenaming /var/scripts/_working_files/micros/import_micros_bkp/mytown/emp_def_out.sql to emp_def_out_mytown

Não entendo por que ele move o final da string para o início da linha. É algo que eu preciso mudar no bash? Eu não acho que tenha algo errado no PHP. Parece apenas acontecer com strings que têm um caminho nelas como o acima.

    
por raphael75 28.02.2017 / 21:04

1 resposta

0

Era uma questão de caráter de fim-de-linha. O arquivo que está sendo processado foi criado no Windows (usando cr lf), mas meu script estava explodindo em "\ n". Eu criei uma função simples para detectar e retornar qual caractere eol está sendo usado. Não é abrangente nem perfeito, mas é bom o suficiente para o que precisamos em nosso ambiente:

function detect_eol($options){
    /*
    options
        str
    */

    $str = $options['str'];

    $eol = array(
        array('raw' => "\r\n", 'str' => '\r\n'),
        array('raw' => "\n", 'str' => '\n')
    );

    for($x=0;$x<count($eol);$x++){
        $cur_eol = $eol[$x];
        if(strpos($str, $cur_eol['raw']) !== false){
            $retval = $cur_eol;
            break;
        }
    }

    return $retval;
}
    
por 28.02.2017 / 21:57