
작동 중인 추적 너브를 비활성화하는 시작 시 실행되는 쉘 스크립트를 작성 중입니다. 나는 로 시작합니다 xinput list
. 파이프를 연결하여 grep Stick
파이프를 연결하면 grep id=
일반적으로 11이라는 두 개의 숫자가 나옵니다. 숫자는 내가 알 수 있는 한 1부터 18까지이지만 다음과 같은 것을 작성하고 foo=xinput list | grep Stick | grep id=
설정 해야 합니다. foo를 11로 변경합니다. 다음은 xinput 목록의 예입니다.
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=10 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ Toshiba input device id=12 [slave keyboard (3)]
↳ TOSHIBA Web Camera - FHD id=13 [slave keyboard (3)]
내가 얻어야 할 것은 Stick 라인에서 id= 바로 뒤의 숫자인 11입니다.
답변1
간단히 말해서 원하는 명령은 다음과 같습니다.
foo="$(xinput list | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?')"
자세한 설명은 다음과 같습니다.
당신은 당신이 원하는 것을 할 수 있어야 grep
하고 다음을 포함하는 정규식을 사용할 수 있어야합니다.뒷모습 주장. 핵심 성분은 다음 grep
표현식입니다.
grep -Po '(?<=id=)\d\d?'
이는 하나 또는 두 개의 숫자로 시작하고 뒤에 오는 하위 문자열과 일치 id=
하지만 접두사가 아닌 숫자만 반환합니다 id=
.
이를 테스트하는 방법은 다음과 같습니다.
echo "id=11" | grep -Po '(?<=id=)\d\d?'
이는 11
출력으로 생성됩니다. 이를 코드 조각에 적용하면 다음이 생성됩니다.
foo="$(xinput list | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?')"
두 번째 테스트로 예제 데이터를 파일에 넣었다고 가정해 보겠습니다 data.txt
.
# data.txt
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=10 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ Toshiba input device id=12 [slave keyboard (3)]
↳ TOSHIBA Web Camera - FHD id=13 [slave keyboard (3)]
그런 다음 다음 명령을 실행하십시오.
cat data.txt | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?'
이는 11
출력으로 생성됩니다.
답변2
AlpsPS/2 ALPS DualPoint Stick
xinput에 지정
알고 있는 경우 장치 이름을 지정하면 해당 장치만 xinput
지정되며 --list
다음과 같이 범위를 좁힐 수 있습니다 --id-only
.
명령:
xinput --list --id-only 'AlpsPS/2 ALPS DualPoint Stick'
지정된 장치의 ID 값을 반환합니다.
11