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)가 스크립트로 전송된다는 점에서 "특별"합니다. 두 가지 옵션이 있습니다:
- 스크립트에서 SIGINT를 캡처하고 원하는 대로 처리하도록 할 수 있습니다. 이는
trap xxx SIGINT
xxx가 실행될 bash 함수인 곳에서 수행됩니다. - 를 실행하여 터미널이 ctrl-c를 무시하도록 할 수 있습니다
stty intr undef
. 그러나 Ctrl-C를 잡는 데 몇 가지 문제가 발생할 가능성이 높습니다.