Basta soltar o ponto e vírgula:
# foo param1 param2 >> run.out & tail -f run.out
Como você faz o trabalho de escape para que o &
esteja realmente executando o primeiro comando em segundo plano?
# foo param1 param2 >> run.out &; tail -f run.out
Você precisa colocar o comando em segundo plano em ().
(ls -R / >>/tmp/list & ); tail -f /tmp/list
Infelizmente, isso realmente é o pano de fundo. Você não poderá nos% 1 para chegar ao seu PID.
Você pode usar nohup:
nohup cmd &
tail -f nohup.out
Acabei de me deparar com esta questão e resolvi-a desta forma:
'foo param1 param2 >> run.out &' ; tail -f run.out
Eu não sei se a semântica é diferente.
Para este caso específico, o seguinte também é útil:
foo param1 param2 | tee -a run.out