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"