Você pode usar o regex avançado (olhar positivo para trás / para frente):
SAMPLESERIAL1=$(ps -o args | grep -Po '(?<=lp_server -n )[[:digit:]]+(?= -d \/dev\/usb\/lp1)')
Estou executando um comando grep e obtendo a saída abaixo:
user@hostname:~$ ps -o args | grep lp_ | grep -v grep | sort -n
/usr/local/bin/lp_server -n 5964 -d /dev/usb/lp1
/usr/local/bin/lp_server -n 5965 -d /dev/usb/lp0
{lp_supervisor} /bin/sh /usr/local/lp/lp_supervisor /dev/usb/lp0 SAMPLESERIAL1 /var/run/lp/lp_pid/usb_lp0
{lp_supervisor} /bin/sh /usr/local/lp/lp_supervisor /dev/usb/lp1 SAMPLESERIAL2 /var/run/lp/lp_pid/usb_lp1
A meta final é ter SAMPLESERIAL1
(3ª linha) atribuído com a porta 5964
e SAMPLESERIAL2
(quarta linha) atribuída com a porta 5965
(há tempo em que essas portas são invertidas, como você pode ver acima )
Preciso verificar qual /dev/usb/lp#
está atribuído a qual porta.
Em seguida, verifique qual /dev/usb/lp#
é atribuído a qual SAMPLESERIAL#
Eventualmente, terei algo como:
if SAMPLESERIAL1 is set to 5964:
do nothing
else:
run command to change
Não tenho certeza da melhor maneira de fazer isso. Eu não sou muito experiente com bash. Meu pensamento original era tentar analisar a saída em variáveis, mas pode haver uma maneira mais eficiente de fazer isso. Eu estou executando isso no tinycore linux se isso ajuda em tudo. .
Você pode usar o regex avançado (olhar positivo para trás / para frente):
SAMPLESERIAL1=$(ps -o args | grep -Po '(?<=lp_server -n )[[:digit:]]+(?= -d \/dev\/usb\/lp1)')