Você pode usar sed
para extrair o id diretamente no script:
#!/bin/bash
# get current id from xinput
id=$(xinput | sed -nE 's/.*ELECOM ELECOM TrackBall Mouse.*id=([0-9]+).*pointer.*//p')
# swap middle and right buttons
xinput --set-button-map $id 3 2 1
O comando sed
pesquisa a saída de xinput
para a linha correspondente, substitui-a pelo número de identificação e p
apenas por rints ( -n
) dessa linha, ou seja, apenas o número. Esse id é salvo como variável $id
, que é simplesmente usado no comando xinput
. Pode-se até mesmo deixar de fora a variável e apenas escrever
xinput --set-button-map $(xinput | sed …) 3 2 1
mas isso não está muito claro - em um script, prefiro a variável com um comentário explicativo.
Você também pode grep
duas vezes para extrair o ID correto:
xinput | grep pointer | grep -oP "ELECOM ELECOM TrackBall Mouse *id=\K[0-9]+"
O primeiro grep
exclui todas as linhas que não contêm "ponteiro", o segundo imprime apenas o ID na linha que contém "ELECOM ELECOM TrackBall Mouse" usando Magia negra PCRE .