最新 追記

徒然日記


2006年9月3日(日) [長年日記]

スイカ

今年初。甘くておいしぃ〜〜

そういえば今年は冷やし中華も一回(しかも実家で)しか食べてないなぁ


2006年9月11日(月) [長年日記]

スイカ

今日も食べたんだが。

ふと日記を書こうと思って、見てみたら、前回スイカ食べたときのが最後の日記…

それってどうよ?

gtk+2でEmacsキーバインド

しばらくLinuxでXを使ってなかったので、ウラシマなんだが

.gtkrc-2.0で

gtk-key-theme-name = "Emacs"
binding "gtk-emacs-text-entry-2"
{
   bind "<ctrl>h" { "delete-from-cursor" (chars, -1) }
}
class "GtkEntry" binding "gtk-emacs-text-entry-2"

こんな風に書けばgtk+2なアプリでEmacsキーバインドになると思っていたんだが、ならぬ〜〜〜

で、色々探すとgconf-editorで"/desktop/gnome/interface/gtk_key_theme"の値を"Emacs"にするのが正解らしい

そんなのしるかーーーーー


2006年9月23日(土) [長年日記]

shell scriptのwhile

仕事でshell script書いてたんすよ。だけど、どうにもうまく動かない。

それで挙動を追ってるとwhileの中で変数に代入した値が、ループの外だと空になってる。

さらに、試してみるとwhileの外である変数に代入して、ループの中でも代入を行うと、ループの中では新たに代入された値になるんだけど、外に出ると始めに代入した値に戻ってしまう。

なんでshell scriptなのにscopeをもってるかのように振る舞うんだ?

shell scpriptって全部Global変数でしょ?とか、先輩と一緒に悩んだりしていたのだが、shell scriptの得意な人に聞いたら

「whileの中の変数は外に出せないよ。まるでsopeみたいに。

困るんだよねぇ、ファイルに吐くとかすると効率が悪いし」との事でした

2時間は悩んでた〜〜orz

実例

わかりにくい人のために実例

#!/bin/sh
A=1
echo "out of loop 1, A: $A"
echo "hoge" | while read line ; do
   echo "in the loop 2, A: $A"
   A=2
   echo "in the loop 2, A: $A"
done
echo "out of loop 2, A: $A"

これを実行すると…

$ ./test.sh                                                                  
out of loop 1, A: 1
in the loop 2, A: 1
in the loop 2, A: 2
out of loop 2, A: 1

こうなる

キモイ

キモすぎる〜〜〜〜

今回の敗因

ファイルから1行ずつ読み込んで、該当行があったら抜けて、次の処理に移る。whileはさっさと抜ける、という感じで書いたことだろか…

結局変数を参照するところまで全てwhileでくくって書いたけど、やっぱりキモイなぁ

ちなみに、一緒に悩んでくれた先輩が、自分で今までに書いたscriptを読み返したら、全てwhileの中で参照していた、との事でした

# 無意識にやってたらしい。scope持つって知って驚いてた

# というか、その場にいた他の人も誰も知らなかったw

gdi++

試してみた。

…これはスゲェ

ただ、スレを見ると「重い、重い。でもFirefoxだと平気って書いてある」

たしかにFirefoxだと4倍綺麗にしても全然気にならない。TeraPadも同じく。

だけどPuTTYとかCottonだとかな〜り重くて実用には耐えない感じ。Becky!は重いなりにもまぁ使えるかな、という感じ。何が違うんだろうなぁ

あとは、.txtとかを開いたときに開かれるエディタにhookさせる方法が分からず。これが出来るとうれしいなぁ

本日のツッコミ(全3件) [ツッコミを入れる]

# UmaShika [whileループの done の前に ps 入れて、実行して味噌。 からくりの端緒が見つかると思われるので。 #変な..]

# smbd [パイプでつないでるからsub shellになってしまうのね…納得 whileだけならscopeを持たないようで。(実..]

# kitaj [hoge() { local r="" while read foo; do ... done ..]

./20060923.html#c">ツッコミを入れる]



最新