Yash 2 その 58: suspend コマンド
suspend 組込みコマンドを付けた。
Ksh だと suspend は単なる kill -s STOP $$
のエイリアスだったりするのだが、サスペンドする前にシェル自身のプロセスグループを戻す処理を行うために、独立したコマンドとして組み込む必要がある。(→bash を suspend するとはまることがある)
Bash や zsh では、ログインシェルで suspend を使うとエラーになるが、yash では気にせずサスペンドする。ログインシェルをサスペンドしても嵌まるだけで意味がないというのは確かだが、嵌まるかどうかはログインシェルかどうかで一概に決められるものでもないので、本当にサスペンドしてよいかどうかの決断はユーザに任せることにした。多分、$SHLVL 変数が 1 かどうかでサスペンドしてよいかどうかを判定したほうが嬉しい場合が多いので、.yashrc で suspend を関数として再定義して、このような判定を追加するとよい。
suspend ()
if [ "$SHLVL" = 1 ] && [ "$1" != "-f" ]; then
echo "cannot suspend" >&2
return 1
else
command suspend
fi
注: yash 自身は $SHLVL 変数の値をいじらないので、$SHLVL をインクリメントする処理も別途 .yashrc に書く必要がある。
| 固定リンク
コメント