Sim, a função que você está chamando está executando no shell atual.
Isso está assumindo que a função foi importada (definida) no shell atual. Isso poderia ter sido feito por meio do fornecimento de algum arquivo (como ~ / .bashrc) ou pela gravação manual da função no shell atual. Você pode confirmar essa suposição executando:
$ type -a change_path
Se isso imprimir a definição da função, a função foi definida no presente shell e, tendo acesso às variáveis atuais do shell, poderia modificar qualquer uma delas.
Isso não significa que a função irá sempre modificar as variáveis se a função estiver adequadamente limitada, como usar (...)
em vez de {...}
:
$ change_path()(
export PATH="foobar:$PATH";
)
Mas essa função ainda está em execução no shell atual, apenas que inicia um sub-shell (...)
Para confirmar, leia isto no manual do bash (ênfase minha):
FUNCTIONS
A shell function, defined as described above under SHELL GRAMMAR, stores a series of commands for later execution. When the name of a shell function is used as a simple command name, the list of commands associated with that function name is executed. Functions are executed in the context of the current shell; no new process is created to interpret them (contrast this with the execution of a shell script).