Python 3.8 (pre-release), 245 bytes
from sys import*
i=0
n=0
a=[0]*30000
exec('\n'.join([((i:=i+(v:=s=='[')-(s==']'))-v)*' '+'while a[n]:^0^n-=1^n+=1^a[n]+=1^a[n]-=1^stdin.read(1)^print(chr(a[n]),end="")'.split('^')[u.index(s)]for s in open(argv[1]).read()if s in(u:='[]<>+-,.')]))
Compiles bf
source code to python
and execs.