トップ «前の日記(2007-02-26) 最新 次の日記(2007-02-28)» 編集

じじぃの日記、ツッコミ可

Twitter: @jijixi_org
Xbox Live: jijixi

初心者が書いた OCaml 入門
Spotlight tips サイト内リンク集
1970|01|02|
2003|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|11|
2011|05|
2012|01|

2007-02-27 [長年日記]

% [雑談] nohup(1) が嫌いだ

tcsh から zsh に乗り換えたときに、csh 系→ sh 系の違いを別にして一番困ったのが nohup の問題だった気がする。

csh/tcsh には組み込みの nohup コマンドがあって、わしは結構よく使ってたんだけど、zsh にはそれが無いので結果外部コマンドの nohup(1) を使うはめになる。 なるんだが、これがどうにも慣れ親しんだものと違うんで、想定している使い方をしようとすると不便でしょうがないわけだ。

nohup(1) の何が気にいらないって、問答無用で出力をファイルにしてしまうのが気にいらない。 csh/tcsh の nohup は、特に指定しないかぎりは通常のコマンド実行と同じように端末に出力を吐くので、リモート作業のときなんかに、長くなりそうな作業に「とりあえず保険として」付けておくという使い方ができる。 当然、そういう長くなる作業の場合 script を使うのは csh 系ユーザの嗜みなので、端末に出力しつつ、万が一ネットワークが途切れても大丈夫という状態を簡単に作れるわけだ。 その点、nohup(1) はそういう…なんというか適当さが無いというか、放置して後から結果を見るのを前提とした作業にしか使えないのがダメ。

ついでに言うと、tcsh では nohup で始めておいて、途中でネットワークの接続を切る必要ができたら、Ctrl+Z でサスペンドして bg でバックグラウンドジョブとして再開させれば、そのままログアウトできちゃうから、後から attach できないことを除けば screen いらずだったんだよな。 というか、screen の存在を知らなかった頃はこれですごしてたし。

組み込みコマンドといえば、nice と nice(1) の違いも結構困ったものだ。 組み込みの nice はプライオリティのデフォルトが +4 なんだが、nice(1) は +10 だったりとか、あとそもそも引数の書式が全然違ったりとか、とにかく混乱した。 さすがに nohup と違って nice は無いと困るんで、それなりに憶えたけど、おかげでもう組み込みの方の使い方は忘れちゃったよ……

今ではすっかり zsh に安住してしまってるが、それでもいまだにわしはインタラクティブシェルとしては csh 系の方が良くできてると思ってる。 まあ、tcsh の良いところは、かなり zsh にも取り込まれてはいるんだけど。 つーか、そうじゃなかったら、いくら zsh が高機能でも乗り換える気にはならなかった気がするし。

% [あなごる][Erlang] 一応合法的な e

OCaml でバイナリ使うやり方はまだ思いつかないので、Erlang に逃避。 相変わらずタイムアウトで通らないので、めんどくさいからここに晒す。 114B.

-module(e).
-export([m/0]).
m()->io:write(32#cdm3mh8tk2cvbrsojnvoaova5uot2pr7o5u915f1hqp2i9r6l8o0aj22i4vo10e0kci).

Erlang の整数は多倍長で、しかも 32 進数リテラルが使えるのである。 というか、2 進数から 32 進数までよりどりみどりなのである。 13 進数とか、29 進数とか、変態的なのだってオッケーさ。 よくわからんとこがスゲーぜ(笑

ちなみにこの数値は、

Eshell V5.5.2  (abort with ^G)
1> io:format("~.32b\n",[271828182845904523536028747135266249775724709369995957
49669676277240766303535475945713821785251664274]).

とかやって調べた。

% [あなごる][OCaml] バイナリで e (失敗編)

そういや、短かくなりそうだけどめんどくさいから試さなかった案が一つあったのを思い出した。 で、あー、めんどくせー、とボヤきながらやってみたら、86B になったので「お、これは」と思ったんだが、なんか思ったような結果が表示されないな……なぜだ。

とりあえず、この線でもう少し研究してみる。

(追記) あー、ダメだこりゃ。手抜きすぎか。 でもある程度手抜きのエンコード法じゃないと、短かくならない気がするんだが、うーん……

% [あなごる][OCaml] バイナリで e (とりあえず 94B)

すんげー手作業(苦笑

夢中になってるうちに airobo さんに先を越されてたが、多分アプローチは同じ気がする。 Statistics の違いは単にどこで区切ってるか程度じゃなかろうか。

しかし、こっから 10B 以上も縮めるなんて、一体どうすんだ?

本日のツッコミ(全7件) [ツッコミを入れる]
% 向井 (2007-02-27 10:59)

nohupコマンドは存在すら知りませんでした<br>……でも disown と何が違うのでしょう?

% jijixi (2007-02-27 11:28)

逆にわしは disown を知らなかったので(苦笑)ちょっと調べてみましたが、disown はジョブに対しての操作みたいですね。<br>nohup はコマンドに対して使うものなので、対応としては nice と renice の関係に似てるかもしれません。<br>csh の nohup はあくまでシェルが死ぬときにそのプロセスに SIGHUP を送らないというだけで、あとは普通にコマンドを実行するのと同じなのが使いやすかったんですよね。<br>必要ならバックグラウンドにして抜けられるし、必要無いならそのまま端末に出力を垂れ流せるという。

% jijixi (2007-02-27 11:35)

disown を csh の nohup の代わりに使おうと思うと、<br><br>% nohup hoge<br><br>で済むところを、<br><br>% hoge<br>^Z<br>% disown<br>% kill -CONT xxx<br><br>とかやらないといけないみたいなんで、やっぱりお手軽度が足りないです。<br>まあ、すでに nohup に関してはあきらめてるから良いんですが(苦笑

% shinh (2007-02-27 18:16)

私も少し前に知ったばかりですが &! はどうですか<br><br>http://d.hatena.ne.jp/lurker/20070220/1171932797

% jijixi (2007-02-27 18:46)

> &! はどうですか<br>あ、これは結構良いかもです。<br>いきなりジョブコントロールの範囲外に飛んでいってしまうのが微妙ですけど (csh の nohup はフォアグラウンドで動かしてる間は普通にサスペンドとかできるのも好きな部分なんで)、少なくとも nohup(1) を使うよりはずっと良い感じなんで憶えておきたいと思います。

% odz (2007-03-02 10:10)

今さっき zsh のソースを読んでいて気づいたんですが、<br>setopt nohup<br>setopt nocheckjobs<br>とかでどうでしょう。

% jijixi (2007-03-02 10:22)

なんだか、setopt nohup は良さげなにおいがしますね。<br>少し調べてみたいと思います。

お名前:
E-mail:
コメント:

トップ «前の日記(2007-02-26) 最新 次の日記(2007-02-28)» 編集

日記ってのは本来、自分で読み返すためにあるもんだよなあ……
もしくは有名人になったら死後に本になったりとかか?

RSS はこちら

jijixi at azito.com