2010年05月13日(木) [長年日記]
- わりと暇。
■ [howto][unix] diffの空白・空行を無視するオプション
diffコマンドのオプションの違いがよくわからなかったのでメモ。使用したdiffは「diff (GNU diffutils) 2.8.1」。
空白を無視する
- -b, --ignore-space-change
- スペースの数だけが違う場合には違いを無視する。 不完全な行は無視される。
- -w, --ignore-all-space
- 行を比較するときスペースを無視する。 不完全な行は無視される。
という似たようなオプションがある。
a.txt aaa = 10 bbb = 20 ccc = 30
b.txt aaa = 10 bbb = 20 c c c = 3 0
という2つのファイルに対し、-bオプションを使うと
% diff -ub a.txt b.txt --- a.txt 2010-05-13 13:56:24.000000000 +0900 +++ b.txt 2010-05-13 13:56:59.000000000 +0900 @@ -1,4 +1,4 @@ -a.txt +b.txt aaa = 10 -bbb = 20 -ccc = 30 + bbb = 20 + c c c = 3 0
となる。空白の数が変わっただけなら差分にならないが、空白が追加されると差分になる。
一方、-wオプションだと
% diff -uw a.txt b.txt --- a.txt 2010-05-13 13:56:24.000000000 +0900 +++ b.txt 2010-05-13 13:56:59.000000000 +0900 @@ -1,4 +1,4 @@ -a.txt +b.txt aaa = 10 bbb = 20 ccc = 30
となり、空白の追加も差分にならなくなる。
空行を無視する
- -B, --ignore-blank-lines
- 空行を挿入・削除するだけの変更を無視する。
というオプションがある。新たに
c.txt aaa = 10 bbb = 20 ccc = 30
というファイルを用意して-Bオプションを使うと、
% diff -uB a.txt c.txt --- a.txt 2010-05-13 13:56:24.000000000 +0900 +++ c.txt 2010-05-13 14:01:26.000000000 +0900 @@ -1,4 +1,7 @@ -a.txt +c.txt + aaa = 10 bbb = 20 + ccc = 30 +
となった。全然空行を無視してくれない。(あと、tDiaryが整形済みテキスト末尾の空行を表示してくれないみたい。)
-uオプションをやめると
% diff -B a.txt c.txt 1c1,2 < a.txt --- > c.txt >
となり想像通りに動いた。バグなのかなあ。
■ [windows][soft] AppliStationが動かなかった
AppliStation1.3.3を使ってみたが、起動して「リストの更新」ダイアログが表示されて処理が進んだ後、「AppliStationのエラー発生」ダイアログが表示され強制終了してしまう。エラーの内容は次の通り。
System.InvalidCastException: 指定されたキャストは有効ではありません。 場所 NaGet.Packages.Install.UninstallInformation.NewInstance(RegistryKey regKey) 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\UninstallInformation.cs:行 134 場所 NaGet.Packages.Install.RegistriedUninstallers.<get_Uninstallers>d__4.MoveNext() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\RegistriedUninstallers.cs:行 86 場所 NaGet.Packages.Install.RegistriedUninstallers.<DetectInstalledPackages>d__d.MoveNext() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\RegistriedUninstallers.cs:行 110 場所 System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection) 場所 NaGet.Packages.PackageListsManager.DetectSystemInstalledPkgs() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages\PackageListsManager.cs:行 144 場所 NaGet.SubCommands.NaGetUpdate.runLocalUpdate() 場所 d:\works\AppliStation\na-get-lib\NaGet.SubCommands\NaGetUpdate.cs:行 182 場所 NaGet.SubCommands.NaGetUpdate.Run() 場所 d:\works\AppliStation\na-get-lib\NaGet.SubCommands\NaGetUpdate.cs:行 113 場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 場所 System.Threading.ThreadHelper.ThreadStart() 場所 NaGet.Packages.Install.UninstallInformation.NewInstance(RegistryKey regKey) 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\UninstallInformation.cs:行 134 場所 NaGet.Packages.Install.RegistriedUninstallers.<get_Uninstallers>d__4.MoveNext() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\RegistriedUninstallers.cs:行 86 場所 NaGet.Packages.Install.RegistriedUninstallers.<DetectInstalledPackages>d__d.MoveNext() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages.Install\RegistriedUninstallers.cs:行 110 場所 System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection) 場所 NaGet.Packages.PackageListsManager.DetectSystemInstalledPkgs() 場所 d:\works\AppliStation\na-get-lib\NaGet.Packages\PackageListsManager.cs:行 144 場所 NaGet.SubCommands.NaGetUpdate.runLocalUpdate() 場所 d:\works\AppliStation\na-get-lib\NaGet.SubCommands\NaGetUpdate.cs:行 182 場所 NaGet.SubCommands.NaGetUpdate.Run() 場所 d:\works\AppliStation\na-get-lib\NaGet.SubCommands\NaGetUpdate.cs:行 113 場所 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 場所 System.Threading.ThreadHelper.ThreadStart()
「d:\works\AppliStation\」という謎のフォルダ名が出力されているのがオソロシ。「指定されたキャストは有効ではありません。」というエラーなんだからバグなんだろうなあ。余裕があればバグ報告するかも。
でもソフトの自動ダウンロードをされるのは少し怖い。AppliStation開発元の情報をもっと開示した方がいいと思うんだけれど。
■ やること
- クリーニング
- 請書