Como posso fazer o bloqueio 'enscript' até que a impressora termine seu trabalho?

0

O seguinte comando irá criar um arquivo pdf em ~/PDF/ :

enscript -B -P PDF  bloom.c

Eu quero mover o arquivo pdf de saída aqui

mv "'ls -dtr1 ~/PDF/* | tail -1'" .

Mas não consigo executar o comando mv imediatamente seguir o comando enscript , porque enscript envia o arquivo de entrada para o PDF da impressora e retorna imediatamente antes que a impressora conclua a criação de um arquivo pdf.

Uma solução muito ruim é inserir o seguinte comando entre os dois comandos

sleep 5

É ruim porque não sei quanto tempo vou esperar.

Note que eu sei que há outra maneira melhor de fazer a mesma coisa sem ter que executar o comando mv depois de enscript , mas gostaria de saber se há alguma maneira de fazer enscript bloquear até que a impressora termine seu trabalho? Lembro-me de ter pensamentos semelhantes para outros comandos além de enscript . Estou assumindo que enscript não oferece essa opção, então estaria interessado em saber se o bash ou outro programa pode fazer isso acontecer. O tratamento de sinal pode ser uma solução, mas não sei qual sinal capturar.

    
por Tim 20.09.2018 / 22:29

1 resposta

1

Como isso é muito grande para colocar em um comentário, você já tentou verificar se algum arquivo no diretório ~/PDF ainda está aberto enquanto eles são iniciados no spool usando lsof (LiSt Open Files)?

Adicione este snippet de código após o seu enscript -B -P PDF bloom.c :

# Go into endless loop and break when all files in */PDF/* are closed.
while :
do
    if ! [[ 'lsof | grep /PDF/' ]]
    then
        break
    fi
    sleep 1
done

e antes do

mv "'ls -dtr1 ~/PDF/* | tail -1'"

Desta forma você perde apenas 1 segundo ...

Para mais informações:

  • lsof listará todos os arquivos abertos no momento
  • o man lsof obrigatório fornecerá ainda mais detalhes.

; -)

    
por 29.09.2018 / 16:57