echo '$HOME/latest/bin' | sudo tee /etc/paths.d/postgresapp
Eu encontrei esse truque legal no site do Postgres.app
echo /Users/user1/latest/bin | sudo tee /etc/paths.d/postgresapp
Eu quero saber como posso fazer isso funcionar para qualquer usuário conectado. Eu quero algo como
echo {whatever the home directory of the logged in user at runtime}/latest/bin | sudo tee /etc/paths.d/postgresapp
Meu primeiro pensamento foi tentar a variável $HOME
, mas os pontos variáveis da minha casa
para o meu diretório home, enquanto eu quero que isso funcione quando qualquer usuário se conecta ao Mac e usa o terminal.app.
echo '$HOME/latest/bin' | sudo tee /etc/paths.d/postgresapp
Tanto quanto eu posso dizer por experiência, a resposta é que você não pode fazer isso com $HOME
, mas existem outras maneiras.
HOME
contém o caminho do usuário atual (lembre-se de que o ambiente é por processo), portanto, a tentativa óbvia seria criar um arquivo que contenha $HOME/latest/bin
sem expandi-lo ao adicionar a linha. (isto é, se na linha de comando echo '$HOME/blah...'
com aspas simples.)
Em seguida, esperamos que o shell interpole isso ao ler esses arquivos e definir o caminho. Mas isso não funciona, pois path-helper
, a ferramenta que usa /etc/paths.d
, parece escapar do cifrão:
$ cat /etc/paths.d/test
$HOME/test
$ PATH="" /usr/libexec/path_helper -s
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:\$HOME/test"; export PATH;
Então você receberá um sinal de dólar literal no caminho.
Se você se importa apenas com o Bash, pode usar o til ( ~
) no lugar de $HOME
. Ele não é escapado e funciona para se referir ao diretório inicial em PATH
. Mas não funciona com ksh
so zsh
, então isso não é uma solução universal.
Em vez disso, você pode adicionar o diretório ao caminho manualmente em /etc/profile
. (Ou em /etc/zprofile
para zsh
.)
No meu sistema, /etc/profile
tem esse snippet definindo o caminho dado por path_helper
:
if [ -x /usr/libexec/path_helper ]; then
eval '/usr/libexec/path_helper -s'
fi
Adicione a atribuição PATH
em algum lugar no arquivo:
PATH="$HOME/latest/bin:$PATH"
Se você colocar a linha após a chamada para path_helper
, o diretório estará no cabeçalho da sua parte, se você colocá-lo antes de path_helper
, path_helper
parece movê-lo para o final do caminho resultante.