CTRL-Cを入力として受け入れます。

CTRL-Cを入力として受け入れます。

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 SIGINTxxxが実行されるbash関数であるところで行われます。
  • を実行して、端末にctrl-cを無視させることができますstty intr undef。しかし、Ctrl-Cをキャッチする際にいくつかの問題が発生する可能性が高いです。

おすすめ記事