Alterei minha variável "HOME" e agora não consigo encontrar "~ / .bash_profile" para alterá-la novamente

15

Eu estava brincando com variáveis ​​de ambiente no meu Mac, tentando aprender como usá-las e usei o comando nano ~/.bash_profileem que adicionei a linha HOME=/Users/MyCompName/Desktoppara atualizar minha variável pessoal.

Essa alteração funcionou e pode ser vista quando eu uso printenvpara exibir todas as variáveis ​​de ambiente, mas quando HOMEvoltei, não consegui ~/.bash_profilemais encontrar . Para onde foi?

Matt
fonte
9
Basicamente ~significa$HOME
el.pescado 8/08/18
6
... então se você redefinir $HOME, ~se redefiniu também
el.pescado

Respostas:

32

Está no mesmo lugar.

Antes que a mudança se ~expanda para algo como /Users/YourUserName, o shell encontra o seu .bash_profilelá. Depois que o arquivo é originado, ele se ~expande para outro caminho, para que ~/.bash_profilenão aponte mais para o arquivo relevante. Isso ocorre porque neste contexto ~significa $HOME.

Se você souber o caminho completo para o diretório inicial atual, poderá usá-lo em vez de ~. No Mac, provavelmente seria assim:

nano /Users/YourUserName/.bash_profile

Ou deixe seu Bash procurar seu diretório pessoal no banco de dados do usuário, em vez de apenas olhar $HOME. Isso não exige que você se lembre de nada:

nano ~YourUserName/.bash_profile

Modificar sua HOMEvariável sem alterar seu diretório pessoal atual não é a melhor idéia. Alterar o diretório inicial de qualquer usuário é uma tarefa administrativa, normalmente os usuários comuns não podem fazer isso.

Kamil Maciorowski
fonte
Impressionante eu era capaz de encontrá-lo novamente obrigado! Você se importaria de elaborar o que você quer dizer com "depois que o arquivo for obtido"? Estou familiarizado com o que significa para um arquivo para se originado
Matt
6
O @Matt .bash_profiletem a forma de um script Bash. Você pode executar um script ou originá-lo. Executar significa criar um subshell e executar o script linha por linha. Fornecer significa executar o script no shell atual . Algumas tarefas destinadas a afetar o shell atual não podem ser executadas em um subshell; alterar uma variável para o shell atual é um deles. É por isso que alguns arquivos são originados, não executados em um subshell. Para originar manualmente um arquivo, use . file( .é especificado pelo POSIX) ou source file( sourceé uma extensão não-POSIX entendida por alguns shells).
Kamil Maciorowski
4
@ Matt Veja o seguinte: Qual é a diferença entre executar um script Bash e contratá-lo?
Kamil Maciorowski
2
Se você (Matt) não souber onde costumava estar seu diretório inicial, poderá usá-lo nano ~YourUserName/.bash_profile. Isso pesquisará seu diretório pessoal no banco de dados do usuário, em vez de apenas olhar para $ HOME.
Stig Hemmer
1
@StigHemmer A resposta agora é wiki da comunidade. Seu comentário útil foi assimilado. Obrigado.
Kamil Maciorowski