Você pode usar o comando command para remover o comportamento especial (pelo qual a falha faz com que o shell saia, entre outras coisas) de especiais embutidos em POSIX shells como ksh ou bash .
Então:
if ! command . /my/file/source.ksh; then
echo >&2 ". failed"
exit 1
fi
Agora, . pode falhar se /my/file/source.ksh não puder ser encontrado, ou não puder ser aberto para leitura ou se houver um erro ao lê-lo ou analisá-lo ou o último comando executado retornar a falha. / p>
Se você quiser considerar apenas o caso em que source.ksh não pode ser aberto para leitura, você pode usar exec (outro especial incorporado ):
die() {
IFS=" "
printf >&2 'Error: %s\n' "$*"
exit 1
}
command exec 3< /my/file/source.ksh || die "Can't read the file"
command . /dev/fd/3
Ou use eval em vez de . :
code=$(cat /my/file/source.ksh) || die "Can't read the file"
eval "$code"