68user's page 掲示板

Prev< No. 1622> Next  [最新発言に戻る] [過去ログ一覧]
No. 1622 # 68user 2001/01/20 (土) 05:30:50
>>1610 rosegarden
補足などしてみたり。間違ってたらご指摘お願いします。

    % cat
と実行して、C-p,C-m,C-v,C-m とタイプしてみて下さい。C-p は ^P と
出力されるでしょう。rosegarden さんが書かれた通り、C-m は改行に
なります。C-v C-m は ^M と表示されます。

この表示は、キー入力を受け取った端末ドライバが行っています。その
端末ドライバのキー割り当てを変えるのが stty コマンドなわけです。
改行 (この場合 C-m と等価) を打たない限りは、cat に文字列は
渡りません。1行のデータが確定して初めて、端末ドライバが cat に
データを送ります。

次に tcsh か bash を起動して、そこで C-p,C-m,C-v,C-m をタイプして
下さい。C-m や C-v C-m はさきほどと同じですが (tcsh ^M でなくて
^J となりますが、両方改行コードなのでこれは置いといて) 、C-p の
挙動が違いますね。1つヒストリをさかのぼります。つまり、1行を
入力していなくても、1文字打った瞬間に tcsh や bash にデータが
渡っていることになります。

これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を
取得しているからです。これを canonical モードといいます。端末の中で
動く mule や emacs や vi もcanonical モードになっているわけです。
これらは端末ドライバを経由していないので、stty の設定とは無関係です。
例えば tcsh のコマンドラインで C-v C-m で ^M となるのは、
    % stty erase ^H
しているからでなく、デフォルトで
    % bindkey ^V quoted-insert
という設定になっているからです (bindkey は tcsh の内部コマンド)。

一方、伝統的な sh は canonical モードでは動きません。(Linux だと
sh=bash だから例外)。つまり端末ドライバ経由でキー入力を拾う
わけで、この場合は stty を使って設定します。

> du や df コマンドの -h (human friedly) オプション
> というのはご存知でしょうか?
関係ないですが、FreeBSD 2.2.6-RELEASE では du -s が使えず
くやしい思いをしました。

使いこなせると幸せだと思うオプション。
    ls -lt、uniq -c、tail -f、du -s
# du -s は Solaris にはないかな。

Prev< No. 1622> Next  [最新発言に戻る] [過去ログ一覧]