안녕하세요, 이 줄이 있어요
$ echo $(xinput | grep "TouchPad") SynPS/2 Synaptics TouchPad id=12 [slave pointer (2)]
어떻게든 12를 얻어 변수에 저장할 수 있는지 묻고 싶습니다. 감사해요.
답변1
device_id=$(xinput | sed -n 's/.*TouchPad.*id=\([0-9]*\).*/\1/p')
바라보다또 다른 대답이 일반적인 관용구에 대한 설명입니다 sed
.
답변2
장치의 숫자 식별자를 가져올 필요가 없으며 문자열을 직접 사용할 수 있습니다. xinput list --name-only | grep Touchpad
"터치패드"를 포함하는 장치 이름을 한 줄에 하나씩 나열하는 데 사용됩니다 .
숫자 식별자가 꼭 필요한 경우 xinput list
이번에는 로 다시 전화하세요 --id-only
.
name=$(xinput list --name-only | grep Touchpad)
nl='
'
case "$name" in
*"$nl"*) echo "Multiple touchpad devices found, aborting"; exit 2;;
"") echo "No touchpad device found, aborting"; exit 2;;
esac
id=$(xinput list --id-only "$name")
답변3
컴퓨터에서 이 스크립트/변수를 사용하려는 경우 장치 이름은 항상 동일합니다. 그래서 당신은 할 수 있습니다
$ xinput list --id-only "SynPS/2 Synaptics TouchPad"
#Output:
12
변수에 저장하려면 다음을 수행하십시오.
$ var=$(xinput list --id-only "SynPS/2 Synaptics TouchPad")
답변4
가장 효율적인 방법은 아니지만 간단한 방법은 다음과 같습니다.
deviceid="$(xinput | grep "TouchPad" | grep -oE 'id=[^ ]+' | cut -d= -f2)"
"$deviceid"
그런 다음 스크립트에서 이를 참조할 수 있습니다.
어떻게 작동하는지 확인하기 위해 먼저 시작한 명령을 사용하여 구문 분석할 입력 줄을 가져옵니다. 그런 다음 grep -o
전체 행 대신 일치하는 데이터만 반환하는 를 사용하므로 -E
구문이 더 깔끔해집니다. 표현은 /id=[^ ]+/
"a i
, a d
, =
기호 및 하나 이상의 문자를 의미합니다.아니요공간. 이렇게 추출한 id=12
다음 으로 보내면 cut
입력을 기호로 분할하라고 지시합니다((for) .=
-d
디12
구분자) 스위치)를 선택하고 원하는 두 번째 필드를 가져옵니다 .
이는 모두 서브셸에서 실행되며 해당 출력은 변수 값으로 사용됩니다.