Output the Source, One Bit at a Time
Bash, 105 bytes



trap -- 'trap|xxd -b -c1|cut -d\  -f2|tr -d \\n|cut -c`x=\`cat f||echo 1\`;echo $((x+1))&gt;f;echo $x`' EXIT


NOTE: Make sure that you don't have an important file called f in the directory you're testing this. 



If you want to test this, you can use the following command:

for i in $(seq 848); do bash path/to/script.sh 2&gt; /dev/null; done | tr -d \\n


Which should give the same output xxd -c1 -b path/to/script.sh|cut -d\  -f2|tr -d \\n.

Explanation

This is using the trap trick - calling trap inside the trap action simply prints that line. Next that output gets piped to xxd which converts it to binary (unfortunately xxd -bp doesn't work - thus the workaround with cut &amp; tr):

xxd -c1 -b $0|cut -d\  -f2|tr -d \\n


From that we're only interested in one bit (say N) which we can select with cut -cN.

To find out what N we're using (remember that's the part that needs to be incremented after each call), simply try to set x to the content of the file f and if it doesn't exist set it to 1:

x=`cat f||echo 1`


Last thing to do, is to update the file f - writing x+1 to it:

echo $((x+1))&gt;f