Verifique se os arquivos estão sendo gravados para

1

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\$ '
    
por sjngm 30.03.2013 / 20:00

1 resposta

2

Correndo o risco de dizer o óbvio, por que você não apenas:

lsof /broacast/storage/path/* | grep -q broadcast/storage/path ; echo $?
    
por 30.03.2013 / 20:09