Gauche > Archives > 2012/07/02

2012/07/02 08:43:35 UTCnatsutan@twitter
#
Gaucheのここが好き QT : shiro: ワンライナーなら仕様の綺麗さよりも短く書けることの方が重要でしょうから、型的な気持ち悪さとかあまり気にしないでいいんじゃないでしょうか。 http://t.co/vh4sgSGs
2012/07/02 08:44:21 UTCnatsutan
#
QTだと、ここに来ちゃうのか。
2012/07/02 10:29:26 UTCyamasushi
#
$ gosh -E 'print *argv*' foo bar
(bar)
gosh: "error": cannot find "foo" in ("." "/home/shuji/gauche/lib" "/home/shuji/gauche/module" "/home/shuji/gauche" "/usr/local/share/gauche-0.9/site/lib" "/usr/local/share/gauche-0.9/0.9.3.3/lib" "/usr/local/share/gauche/site/lib" "/usr/local/share/gauche/0.9/lib")
#
-E のときもfooをスクリプトとして解釈するということでしょうか?
2012/07/02 11:26:50 UTCyamasushi
#
$ gosh -E "print *argv*" -E "exit" foo bar baz
(bar baz)
#
exitをつけるとエラーはでません。
2012/07/02 11:34:53 UTCshiro
#
-Eの効力はすぐ次の引数にしか効果及ぼさないですから、どちらのケースでもfooがスクリプト名です。ただし、スクリプトを読む前に-Eの式が実行されるので、後者ではfooを読む前に終了します。
2012/07/02 12:13:59 UTCyamasushi
#
仮にワンライナを書くとすれば、どうすればいいのでしょうか?
#
つまり、ファイル名をパラメータとするワンライナを書く場合です。
2012/07/02 12:17:46 UTCshiro
#
あーなるほど。gosh -E... "$@" みたいにパラメータ渡したいけどスクリプト自体は存在しないってケースがあるわけですか。んー、今のところ -Eexit とダミーのスクリプトファイル名をはさんでもらうしかないですね。
#
スクリプトファイル名を/dev/nullにすればいけるかと思ったけどエラーになるな
2012/07/02 12:19:10 UTCkoguro
#
gosh -E 'print *argv*' -E exit /dev/null foo bar baz
#
これでいけましたけど
2012/07/02 12:19:37 UTCyamasushi
#
ありがとうございます。
2012/07/02 12:21:16 UTCkoguro
#
-E exit がないとエラーになるのか。なんでだろう?
2012/07/02 12:22:36 UTCshiro
#
-E exitの時はスクリプトファイル読みにいかないので何でもいいんです。
2012/07/02 12:22:52 UTCkoguro
#
なるほど
#
単に無視されるんで、どんな文字列でもいいんですね。
2012/07/02 12:23:23 UTCshiro
#
-Eexit無しでも/dev/nullならいけるんじゃないかと思ったんだけど、file-is-regular? でチェックしてるからデバイスファイルだと弾かれちゃうのか。
2012/07/02 12:23:35 UTCyamasushi
#
$ gosh -E 'print *argv*' -Eexit - foo bar baz
(foo bar baz)
2012/07/02 12:25:36 UTCshiro
#
デバイスファイルやnamed pipeをスクリプト名に指定できて悪いことはないと思うんで直そうかな。
2012/07/02 12:35:20 UTCshiro
#
shiro@scherzo:~/src/Gauche/src$ ./gosh -ftest -E'print *argv*' /dev/null a b c
(a b c)
shiro@scherzo:~/src/Gauche/src$ mknod pipe p
shiro@scherzo:~/src/Gauche/src$ ls -l pipe
prw-r--r-- 1 shiro shiro 0 Jul  2 02:33 pipe
shiro@scherzo:~/src/Gauche/src$ echo '(print "aloha")' > pipe &
[1] 23678
shiro@scherzo:~/src/Gauche/src$ ./gosh -ftest -E'print *argv*' pipe a b c
(a b c)
aloha
[1]+  Done                    echo '(print "aloha")' > pipe
#
commit a28fdb6
2012/07/02 13:54:07 UTCshiro
#
おもしろい。インターネット全ユーザは約2^31人、ということは最低31bitの情報で個人が特定され得る。性別で1bit、人種で数bit…このマージンは案外小さい。不完全なデータベースでも数10bitの情報と付き合わせるとかなり絞り込まれる可能性がある。けれども、その数10bitの中にわざと数bitの嘘を(どれが嘘か明かさずに)紛れ込ませていると、匿名性のマージンを大幅に回復することができる、という話。 https://plus.google.com/u/0/114134834346472219368/posts/8vmpA9fgRMq