CentOSのパッケージ版のnkfで複数ファイルの改行コードを確認した場合に、
始めに選択されたファイルの改行コードになってしまう。
#確認環境
# cat /etc/redhat-release
CentOS release 6.8 (Final)
nkfファイル
# ll /usr/bin/nkf /usr/local/bin/nkf
-rwxr-xr-x 1 root root 221448 11月 12 21:13 2010 /usr/bin/nkf <=パッケージ版
-rwxr-xr-x 1 root root 506327 6月 21 16:25 2016 /usr/local/bin/nkf <=ソース版
パッケージ版バージョン
# /usr/bin/nkf -V
Network Kanji Filter Version 2.0.8 (2007-07-20)
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),2000 S. Kono, COW
Copyright (C) 2002-2007 Kono, Furukawa, Naruse, mastodon
# rpm -qf /usr/bin/nkf
nkf-2.0.8b-6.2.el6.x86_64
ソース版バージョン
# /usr/local/bin/nkf -V
Summary of my nkf 2.1.4 (2015-12-12) configuration:
Compile-time options:
Compiled at: Jun 21 2016 16:25:37
Default output encoding: LOCALE (UTF-8)
Default output end of line: LF
Decode MIME encoded string: ON
Convert JIS X 0201 Katakana: ON
--help, --version output: STDOUT
適当に改行コードを変えてテストファイルを作成
# ll
合計 12
-rw-r--r-- 1 root root 5 6月 21 15:16 2016 CR.txt
-rw-r--r-- 1 root root 14 6月 21 15:17 2016 CRLF.txt
-rw-r--r-- 1 root root 5 6月 21 15:16 2016 LF.txt
cat の -Aオプションで見るとこんな感じ
# cat -A CR.txt
a^Mb^Mc
# cat -A CRLF.txt
hoge^M$
foo^M$
bar
# cat -A LF.txt
1$
2$
3
#ソース版動作
ソース版だと短縮の-g ではなく--guessでないと改行コード表示してくれないが、
正しく改行コードを表示してくれる
# /usr/local/bin/nkf --guess CR.txt CRLF.txt LF.txt
CR.txt: ASCII (CR)
CRLF.txt: ASCII (CRLF)
LF.txt: ASCII (LF)
# nkf -g CR.txt CRLF.txt LF.txt
CR.txt: ASCII
CRLF.txt: ASCII
LF.txt: ASCII
#パッケージ版動作
最初に指定したファイルの改行コードが表示される。
また、CRLFもCRで判定されてる
# /usr/bin/nkf -g CR.txt CRLF.txt LF.txt
CR.txt:ASCII (CR)
CRLF.txt:ASCII (CR)
LF.txt:ASCII (CR)
# /usr/bin/nkf -g LF.txt CR.txt CRLF.txt
LF.txt:ASCII (LF)
CR.txt:ASCII (LF)
CRLF.txt:ASCII (LF)
# /usr/bin/nkf -g CRLF.txt LF.txt CR.txt
CRLF.txt:ASCII (CR)
LF.txt:ASCII (CR)
CR.txt:ASCII (CR)
1つずつ指定すると、CRLF以外は一応判定してくれる
# /usr/bin/nkf -g CR.txt
ASCII (CR)
# /usr/bin/nkf -g CRLF.txt
ASCII (CR)
# /usr/bin/nkf -g LF.txt
ASCII (LF)
CentOSのパッケージ版のnkfで複数ファイルの改行コードを確認するときは注意!!
CentOS7では標準のレポジトリからは消えたっっぽいけど。