/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.