〜2013年5月上旬〜
Ubuntu内同士では全然問題ないが、WindowsからUbuntuへコピペしようとすると化ける。
\Uffffffff\Uffffffff/plain
こんな感じに。それどころかWindows内同士でもばけばけに。
特にgvimではyypすらできない。ばける以前にエラーになってしまう。
ひょっとしてクリップボードのあれかと思いParcelliteを終了させたら直った。
こいつかー。うーむ。選ぶならsynergyのほうだよな。
諸般の事情により出勤しているんだけど、電車の一旦ドア閉め乗車がなかったり、
夕食の社食がなかったりといろいろと新鮮だ。
昨日までのirbはこんな感じになっていた(すでに変更された)。
require "irb" if __FILE__ == $0 IRB.start(__FILE__) else # check -e option if /^-e$/ =~ $0 IRB.start(__FILE__) else IRB.setup(__FILE__) end end
この-eオプションのチェックはなんか意味不明なことになってるが、
元々Ruby 1.4の時代はsample/irb.rbでこうなっていた。
require "irb/main" if __FILE__ == $0 IRB.start(__FILE__) else # check -e option tmp = ENV["TMP"] || ENV["TMPDIR"] || "/tmp" if %r|#{tmp}/rb| =~ $0 IRB.start(__FILE__) else IRB.initialize(__FILE__) end end
-eはその内容が一時ファイルに一旦書かれてそのファイルを読むような実装になっていたのである(evalも)。
% ruby-1.4.6 -ve 'p $0' ruby 1.4.6 (2000-08-16) [i386-linux] "/tmp/rbeSYKcv"
ただこれちゃんと動いていたのか不明である。
if __FILE__ == $0はrequireされてるかどうかの判断で、-eオプションのチェックはrequire側になる。
ということは
% ruby -rsample/irb -e 'p $0'
のようなケースしかないわけだが、本当にこんな使い方を想定していたのか?
226通。いやーここまで減ると全部チェックできる。
RD-H1のHDDを300GBから500GBに換装しようと思い、HDD外してIDE-USBケーブルつないだはいいが、
ぼきっと音がしてまさかと確認してみると1本丸々根元から折れている。
しかもIDE-USBケーブル側のメスに突き刺さっている。もうどう考えても抜けない。
つまり、HDDもIDE-USBケーブルも両方とも使い物にならなくなった。
で、よく見ると500GBはIDEじゃなくてSATAだし。なんだよ、おい、ソフマップ。
半年ぐらい遊ばせただけに。買ってすぐ確認すべきだった。
で、300GBのIDE HDDはまだ遊んでたので、こいつで代用。
500GBも特に使い途もないしSATA HDDをIDEへ変換する基板でも買ってくるか。
またソフマップ行って玄人志向のSATAD-IDEという変換基板を買って500GBつないで試したら見事に認識された。
しかし残り時間が見覚えのある113時間になっていて変だなとぐぐってみると、
やはりデフォルトの250GB分しか使えないらしい。
となると300GB IDEで十分で500GB SATAをつなぐ必要はないわけで。
あ、Ubuntuで見てみるか。SATAになったのでつなげる手段はいろいろあるし。
gpartedとかで広げればいけたりして。
パーティションすらないようで、独自フォーマットじゃpartedで広げるどころの話ではなかった。
まあ、SATAでも換装可能とわかったので次にこわれたときの保険だな。
有名どころのoptipngはパッケージがあるからいいとして、
pngout,
pngrewrite,
pngwolf,
defluffといろいろあることがわかった。
減色処理後はpngoutが効くような気がする。
減色処理はpngcrushとかpngquantで。convertや
ImageWorsenerでもいい。
今年もやはりSubjectは「[inetd] ご請求」だけだった。頑固だねえ。そんな時期になったか。
もう考えずに更新した。
zshだとそのままechoすれば表示できてしまう。
% echo '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002' 我々はシェル芸人だ。
しかし残念ながらbashだとそのまま表示される。
$ echo '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002' \u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002
どうしたもんかと思ったら、$''でいけることがわかった。
$ echo $'\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002' 我々はシェル芸人だ。
これならzshでもいける。あとprintfを使う方法もある。
$ printf '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002\n' 我々はシェル芸人だ。 % printf '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002\n' 我々はシェル芸人だ。 $ /usr/bin/printf '\u6211\u3005\u306f\u30b7\u30a7\u30eb\u82b8\u4eba\u3060\u3002\n' 我々はシェル芸人だ。
builtinだけでなく/usr/bin/printfでもいけるので、
変数にあらかじめ入ってるときなんかはこっちを使ったほうが楽かもしれない。
日付入りのファイル名でログを残すのはよくあるが、放っておくと際限なくたまってしまう。
そこで最新の2個ぐらい残してあとは消したいがどうするか?
% ls -l total 0 -rw-r--r-- 1 eban eban 0 2013-05-05 12:00:00 foo.log.0 -rw-r--r-- 1 eban eban 0 2013-05-06 12:00:00 foo.log.1 -rw-r--r-- 1 eban eban 0 2013-05-07 12:00:00 foo.log.2 -rw-r--r-- 1 eban eban 0 2013-05-08 12:00:00 foo.log.3 -rw-r--r-- 1 eban eban 0 2013-05-09 12:00:00 foo.log.4 % ls -t1 foo.log.4 foo.log.3 foo.log.2 foo.log.1 foo.log.0
foo.log.{3,4}だけ残したい。削除するはその残りなので1行目と2行目を消す。
% ls -t1 | sed 1,2d foo.log.2 foo.log.1 foo.log.0
tailを使う場合は意味合い的には3行目以降表示する。+を使う。
% ls -t1 | tail -n +3 foo.log.2 foo.log.1 foo.log.0
あとはrmで消せばいい。
% % rm `ls -t1 | sed 1,2d` % ls -t1 foo.log.4 foo.log.3
しかしこれだと3個たまるまではrmの引数が空になってしまいエラーになる。
% rm `ls -t1 | sed 1,2d` rm: オペランドがありません Try 'rm --help' for more information.
rm -fにしてもいいが、xargsを使う方法がある。
% rm -f `ls -t1 | sed 1,2d` % ls -t1 | sed 1,2d | xargs -r rm
-rで入力が空なら実行しない。
--no-run-if-empty -r If the standard input does not contain any nonblanks, do not run the command. Normally, the command is run once even if there is no input. This option is a GNU extension.
さらにファイル名に空白を含んでいてもデリミタを改行(-d'\n')にすればok。
% ls -t1 foo bar.log.4 foo bar.log.3 foo bar.log.2 foo bar.log.1 foo bar.log.0 % ls -t1 | sed 1,2d | xargs -r rm rm: `foo' を削除できません: そのようなファイルやディレクトリはありません rm: `bar.log.2' を削除できません: そのようなファイルやディレクトリはありません rm: `foo' を削除できません: そのようなファイルやディレクトリはありません rm: `bar.log.1' を削除できません: そのようなファイルやディレクトリはありません rm: `foo' を削除できません: そのようなファイルやディレクトリはありません rm: `bar.log.0' を削除できません: そのようなファイルやディレクトリはありません % ls -t1 | sed 1,2d | xargs -r -d'\n' rm % ls -t1 foo bar.log.4 foo bar.log.3
昨日の件で空白が含まれたファイル名があるときにxargsを使わずに消すにはどうするか?
引数の区切りはシェル変数IFSで決まっていて、普通は空白、タブ、改行の3つになっている。
これを改行だけにすれば解決する。
% ls -t1 foo bar.log.4 foo bar.log.3 foo bar.log.2 foo bar.log.1 foo bar.log.0 % rm -f `ls -t1 | sed 1,2d` % ls -t1 foo bar.log.4 foo bar.log.3 foo bar.log.2 foo bar.log.1 foo bar.log.0 # 消えてない % (IFS=$'\n'; rm -f `ls -t1 | sed 1,2d`) % ls -t1 foo bar.log.4 foo bar.log.3
IFSを元に戻すのが面倒なので()を使って子プロセスで動かしている。
zshはなぜかIFSにNULも含まれている。