ARAIBOムービーまとめengSearch上田ブログなお、このサイトはbashでできている。main.cdashのmain.hとmain.cに自分のツッコミコメントを入れたもの。gotoやらロングジャンプやら。「dash精読sh行」の一環です。いちお、シェルの研究関連の意味ある活動で、何かの原理主義ではございません。@bsdhack氏からコメントのコメントをいただきましたので書き入れてます。曽孫か玄孫か分かるようにする。シェルはたくさんのプロセスで動くので、これはシェル初心者には馴染みにくい概念かもしれない。rootshellなのかどうかは、shlvlを反転すると分かる。ちなみに(!shlvl)は、shlvlが1以上のときは0(偽)、そうでないときは1(真)になる。真偽をフィーリングで読んでしまう。sucksというのは、いちばん綺麗な言葉で翻訳すると「くたばれglibc」である。○○○」(書けない)。ところで私は研究以外ではC言語でガチな仕事をしたことがない(コマンドを書く程度)ので、errnoについて詳しくありません。いうか、いつもこういうものを無視してコーディングしているから、ダメな人間から脱却できません。↑内部コマンドに相当する関数には必ず末尾にcmdとついています。例外がありそうな予感・・・。↓こいつらを一通り読まないと全貌が見えないわけです。言えるのは、bashより量は少ない。main関数はややこしいのですが、大半はインタラクティブに使うときの設定で、シェルスクリプトを読む場合の処理はあまり複雑でないような気がします。シグナルがいつくるかわからんとか、そういう不確定要素があるので順に読んで行っても一筋縄ではいかないようで。↑シグナル等で別のスレッドが書き換えそうな変数にはvolatileをつけないといけません。最適化されてコードが変わってしまうとフラグの役割を果たさなくなるからです。error.hにいます。ジャンプというのは集英社じゃなくてC言語の何かなので、わからん人は集英社にお問い合わせしないでください。私も使ったことがないので分かりませんので聞かないでください。いうかジャンプがないと実装できないのか。本当にそうなのか・・・。実際にどう動作してどう機能しているかはまだ私には分かってません。↑glibcがあったらerrnoの前処理をするみたいです。↑unlikelyはlikelyと共にShell.hに定義されています。現在のところフィーリングで理解(つまり理解していない)。longjmp(飛び降り自殺に近い行為)すると、ここに戻ってきます。今のところ、setjmpできなかったらこのif文の中身が実行されると解釈。↑reset関数はinit.cで定義されています。このループにいるときはこれまでの処理がなかったかのようにシェルの機能をユーザに提供する段階なので、resetが呼ばれているものと。↓mainは状態(state)で自由奔放にgotoするので死にたい。↓例外がEXITあるいは、状態が0あるいは、-iが指定されていないあるいは、レベルが1以上なら終わる。↑とりあえずCtrl+c押されたらバッファに溜まった何かを出すということは理解。この解釈は間違っている可能性が大いにあり。