Correndo o risco de dizer o óbvio, por que você não apenas:
lsof /broacast/storage/path/* | grep -q broadcast/storage/path ; echo $?
Observação: Li a outra pergunta , mas preciso de outra forma.
Estou trabalhando no meu NAS, que também funciona como um dispositivo de armazenamento para o meu PVR. Agora eu quero mudar meu prompt do shell no NAS sempre que o PVR estiver gravando uma transmissão para ele (considere um aviso "não faça nada de longa duração enquanto uma transmissão está sendo gravada"). Minha primeira idéia foi prefixar o prompt com um vermelho REC
.
Como apontado na outra pergunta, posso usar lsof
para isso:
# lsof /broadcast/storage/path/broadcast.ts; echo $?
<output of lsof>
0
# lsof /broadcast/storage/path/doesnt-exist.ts; echo $?
1
#
No entanto, lsof
parece não funcionar para mim se eu usar
# lsof /broadcast/storage/path/*; echo $?
<output of lsof>
1
#
A lógica parece ser que ela retorna 1 quando encontra um arquivo que não está em uso. No entanto, para mim, ele deve retornar 0 quando pelo menos um arquivo estiver em uso.
Eu sei que posso fazer um loop nos arquivos e parar quando o primeiro arquivo retornar 0, mas como quero fazer isso no prompt, não sei como fazer disso uma linha única.
EDIT:
Graças a tink eu retrabalhei minha idéia e meu prompt agora se parece com isso (note que eu tive que fazer o curinga funcionar como lsof /.../*
já estaria no PS1):
export PS1=''find /broacast/storage/path/ -name "*.sc" -print0 | \
xargs -0 lsof | \
grep -q COMMAND && echo -e "3[0;31m[REC]-3[0;37m"'\u@\h:\w\$ '