Adicione um caminho para /etc/paths.d/ referindo-se ao diretório inicial de usuários logados

1

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.

    
por american-ninja-warrior 19.12.2017 / 15:52

2 respostas

1

echo '$HOME/latest/bin' | sudo tee /etc/paths.d/postgresapp
    
por 19.12.2017 / 15:55
1

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.

    
por 20.12.2017 / 18:21

Tags