私はbashの読み取り機能をいじっています。現在のシェルの上にあるシンプルなレイヤーとして、これまでのところ気に入っています。read -e はタブ補完と前のコマンドを実行し、ctrl+d で EOF を送信すると、元のシェルに戻ります。ここに私の参照があります:
Bash (または他のシェル): すべてのコマンドを関数/スクリプトでラップします。
SIGINT、ctrl+c の処理についてヘルプが必要です。通常のシェルでは、入力を開始して途中で ^C を押すと、すぐに行が終了します。この単純な例では、^C の後、登録される前にリターン キーを押す必要があります。
readline が行う優れた機能を維持しながら、SIGINT を正しく処理するにはどうすればよいですか? 理想的には、continue ステートメントを while read ループに送信するか、読み取りが待機している STDIN に何らかの方法で \n を送信します。
コード例:
#!/bin/bash
# Emulate bash shell
gtg=1
function handleCtrl-C {
# What do I do here?
gtg=0
return
}
trap handleCtrl-C INT
while read -e -p "> " line
do
if [[ $gtg == 1 ]] ; then
eval "$line"
fi
gtg=1
done