Você pode usar um recurso de bash que permite interceptar a entrada do usuário e agir sobre ela, substituindo qualquer execução de comando usual.
Adicione o seguinte ao seu script de inicialização bash :
shopt -s extdebug
function auto_source_names {
local CMD=$BASH_COMMAND
if [[ -f "$CMD" ]] && [[ ! -x "$CMD" ]] ; then
source "$CMD"
return 1
else
return 0
fi
}
trap 'auto_source_names' DEBUG
Isso faz com que a função seja chamada para todos os comandos executados. Se for o nome de um arquivo que não é executável (caso contrário, também bloquearíamos as chamadas ./foo.sh legítimas), ele será originado e nenhum comando será executado. Esteja ciente dos arquivos chamados ls ou rm no mesmo diretório. Você pode adicionar proteções adicionais, por exemplo requerendo .sh extensão de arquivo ou file informando que o nome é um arquivo de texto.
Exemplo:
Crie foo.sh :
FOO=bar
Então:
$ echo $FOO
$ foo.sh
$ echo $FOO
bar