저는 실행 중인 추적 블록을 비활성화하는 시작 시 실행되는 셸 스크립트를 작성하고 있습니다. 로 시작해서 xinput list
파이프로 연결하고 grep Stick
, 그런 것으로 파이프해야 하는데 grep id=
, 그러면 보통 11이라는 두 개의 숫자가 나옵니다. 내가 아는 한 숫자는 1에서 18 사이일 수 있지만 foo=xinput list | grep Stick | grep id=
11에는 and foo와 같은 것을 써야 합니다. 다음은 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