標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Visual Studio の作る「My Project」というフォルダー は awk 泣かせである

なぜなら

svn status -q | gawk "{ print $2 }"

が My の部分で見事に切れる。だが、

svn status -q | gawk "{ $1 = \"\" ; print $0 }"

以上のように $1 をつぶしてやるという方法もあるのだ。覚えておこうな!>未来の自分

未来の自分より

これ、$1 と $2 の間の空白が残っているし、My Project と空白が含まれている限りは二重引用符で囲まないといけないなど、諸々課題が残ってた。

実際、たとえば DATABASE というワードを含んだパスだけを commit しようとするならば、

svn status -q | gawk "/DATABASE/{ $1=\"\" ; printf \"%c%s%c\n\",34,substr($0,2),34}" | clip

クリップボードにコピーしてから svn commit + Ctrl-Y とせざるを得なかった。

本当は nyagos の逆クォートを使って

svn commit `svn status -q | gawk "/DATABASE/{ $1=\"\" ; printf \"%c%s%c\n\",34,substr($0,2),34}"`

とやりたいところだが、これだと何故か二重引用符が消えてしまう。うーん

さらに未来の自分より

二重引用符が消えてしまうのは、nyagos 側の引用機能が機能文字である二重引用符を無効化していなかったのが原因だった。

ということで修正

diff --git a/nyagos.d/backquote.lua b/nyagos.d/backquote.lua
index bc5fa92..f3d1398 100644
--- a/nyagos.d/backquote.lua
+++ b/nyagos.d/backquote.lua
@@ -12,7 +12,7 @@ backquote = {
             return false
         end
         r = nyagos.atou(r)
-        r = string.gsub(r,'[|&<>!]',function(m)
+        r = string.gsub(r,'["|&<>!]',function(m)
             return string.format('%%u+%04X%%',string.byte(m,1,1))
         end)
         return string.gsub(r,'%s+$','')

追々々記

ということで、めでたく

svn commit $(svn status -q | gawk "/DATABASE/{ gsub(/^[^ ]+[ \t]*/,\"\");print \"\x22\" $0 \"\x22\" }" | type)

は nyagos 的には動くようになった(最後の type は nyagos 独自版で ANSI→UTF8変換をさせている。あと $1 を消すのもやめてしまっていて、この記事の存在意義すら失われている)

だが、これ

svn: E020024: Error resolving case of '"(ファイル名)"'

と怒られる。要は svn status が稼働中なのに、svn commit を動かしているからのようだ。プロセスの終了シーケンスが完了していないのかな?

仕方ないので、| clipクリップボードに食わせてから、Ctrl-Y しましたわ