奇妙なファイルパスのラップ

奇妙なファイルパスのラップ

ファイルの名前が変更されると、エコーを表示して文字列の末尾を先頭にラップする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;
}

関連情報