Obter variável da linha

1

Olá eu tenho esta linha

$ echo $(xinput | grep "TouchPad") SynPS/2 Synaptics TouchPad id=12 [slave pointer (2)]

e eu gostaria de perguntar se é possível de alguma forma obter 12 e salvá-lo em variável. Obrigado.

    
por ChickenLover 28.03.2017 / 21:58

4 respostas

1

Se você vai usar este script / var em sua máquina, o nome do dispositivo será o mesmo o tempo todo. Assim você pode apenas fazer

$ xinput list --id-only "SynPS/2 Synaptics TouchPad"
#Output:
12

Para armazená-lo em uma variável:

$ var=$(xinput list --id-only "SynPS/2 Synaptics TouchPad")
    
por 28.03.2017 / 22:25
2
device_id=$(xinput | sed -n 's/.*TouchPad.*id=\([0-9]*\).*//p')

Veja essa outra resposta para obter uma descrição desse idioma sed comum.

    
por 28.03.2017 / 22:12
2

Você não precisa obter o identificador numérico do dispositivo, você pode usar a string diretamente. Use xinput list --name-only | grep Touchpad para listar nomes de dispositivos que contenham “Touchpad”, um por linha.

Se você quiser o identificador numérico, chame xinput list novamente, desta vez com --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")
    
por 30.03.2017 / 02:14
0

Uma maneira simples, se não a mais eficiente, é:

deviceid="$(xinput | grep "TouchPad" | grep -oE 'id=[^ ]+' | cut -d= -f2)"

Você pode se referir a "$deviceid" em seu (s) script (s).

Trabalhando para ver como isso funciona, primeiro tomo o comando que você iniciou para obter a linha de entrada para analisar. Em seguida, uso grep -o , que retorna apenas os dados correspondentes, em vez da linha inteira, e -E , que permite uma sintaxe mais sucinta. A expressão /id=[^ ]+/ significa "um símbolo i , a d , um símbolo = e um ou mais caracteres que não são um espaço. Isso extrai id=12 . Então, envio que para cut , que eu digo para dividir a entrada em = símbolos (com o -d (para d elimitador)), e pegue o segundo campo, que é o 12 que você queria.

Tudo isso é executado em um subshell, cuja saída é usada como o valor da variável.

    
por 28.03.2017 / 22:04