Isto parece funcionar tanto no csh quanto no bash e funciona bem com a entrada binária (também \ 0 como primeiro char):
# Set $_FIRST_CHAR_FILE to the name of a temp file.
eval 'echo $SHELL | grep -E "/(t)?csh" > /dev/null && echo setenv _FIRST_CHAR_FILE /tmp/$$.first_char_file || echo export _FIRST_CHAR_FILE=/tmp/$$.first_char_file'
dd bs=1 count=1 of=$_FIRST_CHAR_FILE >&/dev/null
test -s "$_FIRST_CHAR_FILE" && ( cat $_FIRST_CHAR_FILE; rm $_FIRST_CHAR_FILE; cat - ) | program
Obrigado a @glenn-jackman por dar a ideia de ler um pouco antes de passar isso e o resto do stdin através de cat
.