O problema aqui, como é frequentemente o caso, é sobre os diferentes tipos de shell:
-
Quando você abre um emulador de terminal (
gnome-terminal
, por exemplo), está executando o que é conhecido como um shell interativo, sem login . -
Quando você faz login na sua máquina a partir da linha de comando ou executa um comando como
su username
ousudo -u username
, você está executando um shell login interativo .
Então, dependendo do tipo de shell que você iniciou, um conjunto diferente de arquivos de inicialização é lido. De man bash
:
When bash is invoked as an interactive login shell, or as a non-inter‐
active shell with the --login option, it first reads and executes com‐
mands from the file /etc/profile, if that file exists. After reading
that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
in that order, and reads and executes commands from the first one that
exists and is readable. The --noprofile option may be used when the
shell is started to inhibit this behavior.
Em outras palavras, ~/.bashrc
é ignorado pelos shell de login. Como você está usando a opção -i
para sudo
, os arquivos de inicialização para o shell de login do usuário estão sendo lidos (de man sudo
):
-i, --login
Run the shell specified by the target user's password data‐
base entry as a login shell. This means that login-specific
resource files such as .profile or .login will be read by the
shell.
Então, o que você pode fazer é
-
Defina a função em
~/.profile
ou~/.bash_profile
do usuário. Tenha em mente que~/.profile
será ignorado se~/.bash_profile
existir. Também tenha em mente que~/.bash_profile
é específico do bash, então eu usaria.profile
, apenas certifique-se de que~/.bash_profile
não exista. -
Origem
~/.nvm/nvm.sh
de~/.profile
.