Korn――高機能なシェル:Beginner's Guide(3/3 ページ)
一般的なLinuxでは、デフォルトでbashが使用されている。しかし、実行の際に使用するメモリ容量が少なく、かつ実行が高速なKornシェルが明日のあなたのデフォルトシェルになるかもしれない。
コプロセス
bashを使いなれているのなら、「|」記号で表わす「パイプ」についてはおそらくすでに知っていることだろう。パイプを使えば、あるプロセスの出力を別のプロセスの入力として与えることができる。Kornシェルのコプロセスは、言ってみれば単に双方向のパイプだ。コプロセスを使えば、バックグラウンドプロセスとフォアグラウンドプロセスとがお互いに通信することができる。使い方は簡単で、「|&」記号を使ってプロセスをバックグラウンドで実行すれば、「print -p」でそのプロセスに情報を送ることができて、「read -p」でそのプロセスの出力を受け取ることができる。
それではまず、バックグラウンドで実行するためのスクリプトを作成しよう。次に示すスクリプトは、入力として数字を受け取って、これまでに入力された値の合計を出力する。
#!/bin/ksh
total=0
while [ "" == "" ]
do
read input
(( total = total + input ))
echo $total
done
このスクリプトをkeep_count.kshとして保存しておけば、コマンドラインでもスクリプトの中でも、以下のような形で使用できるようになる。
./keep_count.ksh |&
print -p 2
read -p x # xの値は2
print -p 10
read -p x # xの値は12
バックグラウンドで実行するプロセスの数は幾つでもよい。しかし幾つもプロセスを起動すると通信したいプロセスをどうやって指定したらよいのかが問題になる――とは言ってもKornシェルではそれもたいした問題ではない。というのも、各パイプのファイルディスクリプタを再定義できるからだ。
./ keep_count.ksh |&
exec 4>&p # 入力を再定義する
exec 5<&p # 出力を再定義する
print -u4 1
read -u5 x # xの値は1
./ keep_count.ksh |&
exec 6>&p
exec 7<&p
print -u4 1
read -u5 x # xの値は2
print -u6 1
read -u7 y # yの値は1
最後に2点ほど
冒頭でKornシェルにはbashとの完全な後方互換性があると述べたが、実際にはbashとは異なる点もある。例としては履歴機能がある。bashで「history 100」を実行すると、直近の100個分のコマンド履歴のエントリが表示されるが、同じことをKornシェルで実行すると、履歴ファイルの100行めからの全履歴が表示される。なおKornシェルの場合、再び実行したい行を見つけたら「r」と行番号を入力すればよい。
>history
1069 ls -l /lib/ast/ksh
1070 ls -l /bin/ksh93
1071 html2text -style pretty /home/bainm/Articles/Bain_ksh.html | wc -w
1072 grep bainm /etc/passwd
1073 ps -ef | grep firefox
1074 kill -9 3639
>r 1071
もう1つKornシェルを使い始めたときに気づくかもしれない点として、上矢印キーを入力した際に、最後に入力したコマンドではなく制御文字が表示されるということがある。これは左/右/下矢印キーを入力した場合についても同じだ。しかしこの点は簡単に改善でき、「set -o emacs」という一行を/etc/.kshsrcファイルに追加しておけば、次回シェルを起動したときには、矢印キーは慣れ親しんだ通りの動作をするだろう。
関連記事
- Beginner's Guide:コマンドラインから実行する迅速かつ柔軟な算術計算機
コマンドライン愛好派のユーザーであれば、電卓計算程度でGUIに切り替えたくないという人間も多いだろう。本稿で解説するCalcなどのアプリケーションを利用すれば、キーボード操作だけで電卓以上の複雑な計算を処理できる。 - コマンドラインとGUIを融合するHotwire
Hotwireの登場により、テキストベースのシェルと近代的なGUIは互いに交わることのない2つの別世界ではなくなった。Hotwireを試してみると、その便利さには驚かされることだろう。 - オープンソースツールを使ったハードウェア診断
あなたが相当な強運の持ち主でない限り、コンピュータの故障や破損を回避することはできない。ここでは、ハードウェアの問題を突き止めるためのオープンソースツールを幾つか紹介する。
Copyright © 2010 OSDN Corporation, All Rights Reserved.