1, 2, 3, 4, 5 .... と無限ループで連続した数字を表示し、Escape キーのような特定のキーで止まるようなプログラムを作りなさい (その 2)

1, 2, 3, 4, 5 .... と無限ループで連続した数字を表示し、Escape キーのような特定のキーで止まるようなプログラムを作りなさいで中途半端に「Ctrl + C を押せば止まる」というようなことを書いたのですが、ご存知のようにawk でテトリスみたいなゲームをつくろう! (嘘)で紹介した方法を用いると、きちんと作れます。 作り方は両者を結合すれば良いだけですが、"q" キーで止まるようにするプログラムは以下のようになります。

#! /usr/bin/gawk -f
# infinit_loop.awk

BEGIN {

    get_key_cmd = "stty -icanon min 1 ; "\
                  "((while :; do echo '~'; sleep 0.1; done) &"\
                  "(while :; do echo `dd bs=1 count=1`; done)) 2> /dev/null";

    for (;;) {
        get_key_cmd | getline;

        if ($1 == "q") {
            close(get_key_cmd);
            exit;
        } else {
            print ++i;
        }
    }
}

実際に試せば分かります。 ただし、Unix 系 OS のみ動作します。

$ gawk -f infinit_loop.awk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
q   <--- ここで "q" を押した

というわけで、やっと課題を正しく (?) 解くことができました。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png