スクリプト中でこんなプロンプトを出して、パスワードを読み取りたい場合。
Password:
read コマンドを使えば可能だが、入力した文字列が見えてしまう。そこで
"stty -echo" を使う。端末への表示を抑制できる。入力が終わったら
"stty echo" で元に戻す。
trap 'stty echo' INT stty -echo printf "Password: " read password echo "" stty echo trap INT
trap を使っているのは、スクリプトが途中で終了した場合も
"stty echo" させるため。
最後の trap は sh だとエラーになってしまった。bash だと OK。どんな
意味なんだろう?
シェルから
% ls
とコマンドを実行すると、シェルは以下のことを行う。
o システムコール fork(2) を呼び、子プロセスを生成する。
o 子プロセスは ls を exec(2) する。
o 親プロセスであるシェルは、ls の実行が完了するのを待つ (wait する)。
一方、
% exec ls
と exec を使うと、シェルは fork(2) せず、いきなり ls コマンドを
exec(2) する (シェルの内部コマンド exec(1) を実行すると、内部でシ
ステムコール exec(2) が呼ばれるということ)。シェルのプロセス情報
は ls のプロセスの情報で上書きされる。なお、子プロセスは生成され
ないので、シェルと ls のプロセス ID は同じになる。
UNIXの部屋 <http://x68000.startshop.co.jp/~68user/unix/>