
Linuxスクリプトに問題があります。
#!/bin/bash
x=1;
while [ $x != 0 ]
do
echo "Type a command:"
read -r command
eval "$command"
if [ "$command" = end ]
then x=0;
fi
if [ "$command" = kill ]
then echo "To end the program, type the end"
fi
done
私はkillのようなCTRL_Cと同じことをしたいと思います。ユーザーが CTRL_C と入力すると、スクリプトに以下が表示されます。プログラムを終了するには、end と入力します。しかし、どうすればいいのかわかりません。
ミッションは次のとおりです。
ループで実行され、「Enter command:」というメッセージを表示し、キーボードから文字列を検索するスクリプトを作成します。ユーザーが「end」と入力すると、スクリプトは終了する必要があります。それ以外の場合は、入力された文字列をシェルで実行する必要があるコマンドとして扱う必要があります。操作中にこのキーを押すか、killコマンドを使用してスクリプトを終了しようとすると、スクリプトに次のメッセージが表示されます。作業を完了するには、「end」と書いてください。
答え1
端末エミュレーションがある場合、Ctrl-Cはキャプチャされ、信号(SIGINT)がスクリプトに送信されるという点で「特別」です。 2つのオプションがあります。
- スクリプトからSIGINTをキャプチャし、必要に応じて処理することができます。これは
trap xxx SIGINT
xxxが実行されるbash関数であるところで行われます。 - を実行して、端末にctrl-cを無視させることができます
stty intr undef
。しかし、Ctrl-Cをキャッチする際にいくつかの問題が発生する可能性が高いです。