作成経緯
GitHubにファイル末尾が改行になっていないファイルをアップすると怒られます。
なぜファイル末尾に改行を入れるのか
入っていないと、エラーになる可能性もあるらしい。
今やっているスクールでは必須要件なので、プロジェクト内のファイルが全て末尾改行になっていることを確かめるツールがあれば、後々楽になるだろうと思い、シェルスクリプトを書いてみることに。bashは一度も書いたことがなかったので練習も兼ねて書いてみます。
動作確認は、今扱っているRailsのビューだけなので、さまざまな条件で期待通り動かすには、それなりの改良が必要と思います。
コード
#!/bin/bashsubject=""
find ./ -type f -print | xargs tail-c 1 | while read line;do
if["${line:0:3}"="==>"];then
subject=${line}else
str=$(echo${line} | xxd -p)if[!"${str}"="0a"];then
echo"${subject}"fi
fi
done説明
find ./ -type f -print | xargs tail-c 1 | while read line;dofind ./ -type f -printで実行ディレクトリ以下のファイルを再帰的に検索xargs tail -c 1で検索結果のファイルの最後の文字を取得whileでファイルごとにループ処理
if["${line:0:3}"="==>"];then
subject=${line}"${line:0:3}" = "==>”で行頭が”==>”に合致する行を変数に格納する。”==>”はtailコマンドから出力されたファイル名のある行の行頭。
str=$(echo${line} | xxd -p)if[!"${str}"="0a"];then
echo"${subject}"echo ${line} | xxd -pでファイル末尾文字を16進数の文字コードに変換。xxdは16進数に変換するコマンド。! "${str}" = "0a"でファイル末尾が”0a”(LF改行)になっていない条件で、ファイル名をechoで標準出力。