文件路径的奇怪包装

文件路径的奇怪包装

我有一个从 AWS AMI Linux EC2 实例上的命令行运行的 PHP 脚本,该脚本在重命名文件时会回显,并且会将字符串的末尾回绕到开头。该字符串应如下所示:

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

但结果是这样的:

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

我不明白为什么它将字符串的末尾移动到行的开头。我需要在 bash 中改变什么吗?我不认为 PHP 有什么问题。它似乎只发生在其中有像上面这样的路径的字符串中。

答案1

这是一个行尾字符问题。正在处理的文件是在 Windows 中创建的(使用 cr lf),但我的脚本在“\n”上分解它。我创建了一个简单的函数来检测并返回正在使用的 eol 字符。它并不全面或完美,但足以满足我们环境中的需求:

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;
}

相关内容