Quando você inicia o pipe dessa maneira:
screen -S "wordwatch" tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log
somente tail -F server.log
é lançado em screen
e todo o restante está conectado ao screen
, não ao tail
.
Portanto, você deve invocar seu script bash que já funciona:
screen -S "wordwatch" myworkingscript.sh
A outra abordagem é lançar o shell explicitamente e passar toda a linha para ele:
screen -S "wordwatch" bash -c 'tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log'
Além disso, a outra boa maneira de assistir a logs com tela - é a configuração especial:
#### logger.screenrc
sessionname logger
hardstatus alwaysignore
split
split
screen -t "Log One" 1 sh -c 'tail -F /a/b/c | egrep "xxxx" | tee -a '
focus
screen -t "Log Two" 2 /home/somescript.sh
focus
screen -t "Messages" 3 /home/otherscript.sh
focus
####
screen
deve ser chamado assim:
# screen -c /home/logger.screenrc
Para sair, basta pressionar <CTRL-A><CTRL-\>
e confirmar.