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