/bin/sh source from stdin (from other program) not file

You can use eval:

eval "$(./settings)"

eval "`./settings`"

On systems where /dev/fd is available, bash supports process substitution:

source <(./settings)

Here, <( ) will expand to an automatically assigned path under /dev/fd/... from which the output of ./settings can be read.