O problema é que a saída de ./program -a asdf fica armazenada em buffer quando executada no pipeline, e que qualquer saída será armazenada no buffer até que esta fique cheia.
Você pode controlar o buffer de saída de um comando usando stdbuf ; em particular, para executar ./program -a asdf com um stdout sem buffer:
stdbuf -o0 ./program -a asdf
Para que seu pipeline bufferizado se torne:
stdbuf -o0 ./program -a asdf | script.sh