나는 이것으로 부분적으로 성공했지만 막혔습니다. 이것은 내 스크립트입니다.
사용자에게 메시지를 표시하고 USB 게임패드의 입력을 기다린 다음 누른 버튼에 따라 명령을 실행하고 싶습니다.
if lsusb | grep -q '0583:2060'
then
echo "press the A button"
#
if jstest --event /dev/input/js0 | grep -q "number 0, value 1"
then
echo "you pressed the A button"
else
echo "you pressed the NOT A button"
fi
fi
게임패드가 잘 연결되어 있는지 확인합니다. A 버튼을 누르면 jstest도 확인하고 "A 버튼을 눌렀습니다"라는 메시지가 표시됩니다.
하지만 이 경우에는 grep이 jstest(A 버튼)에서 "버튼 0, 값 1"만 필터링하기 때문에 "else" 부분을 수행할 수 없습니다. 즉, A 버튼을 누르지 않으면 jstest가 됩니다. 파이핑입니다. grep할 필요가 없습니다. 항상 A 버튼을 기다립니다.
나는 이것을 할 수 있는 어떤 방법이 있을지도 모른다고 생각했습니다:
grep -q "number ., value 1"
누른 버튼이 무엇이든 반환한 다음 grep이 표시하는 내용에 따라 다른 명령을 실행합니다. 나는 이것을 위해 케이스 문을 사용할 수 있다고 생각했지만 jstest를 케이스와 함께 사용할 수는 없습니다.
나는 jstest가 이런 종류의 작업에는 테스트용으로 적합하지 않다고 생각하지만 광범위한 인터넷 검색을 통해 스크립트를 통해 게임 패드와 상호 작용할 수 있는 다른 옵션이 없다는 것을 알게 되었습니다.
사용자에게 메시지를 표시하고, 버튼이 눌릴 때까지 기다린 다음, 누른 버튼에 따라 다른 명령을 실행하는 쉘 스크립트를 어떻게 만들 수 있습니까?
답변1
grep
일치하는 텍스트를 출력 해야 합니다 .그리고경기가 끝나면 중지하세요. 또한 유형 1(버튼)의 이벤트에만 관심이 있으므로 이벤트를 더욱 철저하게 필터링해야 합니다.
jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1"
jstest
버튼을 누를 때까지 실행 된 후 이벤트 정보를 출력합니다. read
누른 버튼의 수를 찾으려면 다음 방법을 사용하여 이를 처리할 수 있습니다 .
jstest --event /dev/input/js0 | grep -m 1 "type 1, time .*, number .*, value 1" | read _ _ _ _ _ _ number _ _
if [ "${number%%,*}" -eq 0 ]
then
echo "You pressed the A button."
else
echo "You pressed a button other than A."
fi