source
carrega o arquivo de script bash e o interpreta no ambiente atual do shell. cat
não é um script bash, mas um arquivo de programa binário e bash
não conseguem interpretar com êxito seu conteúdo como código de script. Além disso, os scripts bash não projetados para uso com source
possivelmente se comportarão mal.
source filename [arguments]
Read and execute commands from
filename
in the current shell environment and return the exit status of the last command executed fromfilename
. [...] If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the positional parameters are unchanged. The return status is the status of the last command exited within the script (0 if no commands are executed), and false iffilename
is not found or cannot be read.
Quando você executar com &
, será executado em segundo plano. Qualquer alteração no status será exibida apenas quando o prompt for impresso na próxima vez e se parecer com isso:
[1]+ Done source .bashrc
Se você realmente quer lançar um programa que substitui o shell, dê uma olhada em exec
.
exec [-cl] [-a name] [command [arguments]]
If command is specified, it replaces the shell. No new process
is created. The arguments become the arguments to command. [...]