Diferença entre ~ / folder e / home / username / folder ao criar um caminho em / etc / environment

3

Eu tinha um script executável no meu Ubuntu localizado no diretório ~/project/ e tentei adicionar esse caminho a /etc/environment . Então, eu edito o caminho para este PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/project/" . Em seguida, efetuo o logout e login, abra o terminal como su e execute o comando para executar meu script nessa pasta, mas o resultado é command not found .

Em seguida, altero o caminho em /etc/environment para PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/r0xx4nne/project/" e voila it works.Now eu posso executar o script executável dentro de ~/project/ sem falha no comando su .

A minha pergunta é, qual é a diferença entre ~ / project e / home / r0xx4nne / project quando se trata de criar um caminho em / etc / environment ?

Por que aconteceu assim? Eu sou um novato e eu só quero saber mais. Obrigado por qualquer resposta.

    
por r0xx4nne 18.06.2012 / 06:28

3 respostas

5

No shell, ~/project/ é expandido para /home/yourusername/project na maioria das circunstâncias. Isso é chamado de expansão do til .

Se você colocar

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/project/

(note, sem as aspas) em ~/.profile . Seu PATH será configurado corretamente, porque ~/.profile é interpretado por um shell quando você efetua login. /etc/environment (e o ~/.pam_environment específico do usuário) não é interpretado por um shell. Ele é lido pelo módulo pam_env durante o login, mas só aceita NAME=VALUE pares e sem expansões (como $var ou ~/ ou $(command) etc.) serão feitos no VALUE .

    
por geirha 18.06.2012 / 07:00
1

Quando você faz login como su, ~ é /root , não /home/<yourusername> . Caso contrário, ambos são iguais.

NB: O til é expandido pelo shell (e não ls ) antes de executar o comando. Por exemplo, se você executar sudo ls ~ , o comando que será executado será ls /home/<yourusername> e não ls /root . Para impedir que o shell expandisse o til como usuário não root, você poderia:

  • primeiro login como root , então execute o comando no shell raiz ou
  • passe o comando como argumento para um shell e faça o shell rodar como root:

    sudo bash -c "ls ~"
    
por Thanh Phú 18.06.2012 / 06:38
0

O til representa o diretório pessoal do usuário atual. Pode ser seu, ou pode ser outro, dependendo de quando é usado. Se você ainda não está logado, não funcionará.

Um problema relacionado é que / etc não é seu diretório e não é o lugar para adicionar seus caminhos pessoais. Se houvesse outro usuário, por que ele teria um caminho para o seu diretório pessoal?

O local correto para modificar o caminho depende de quem precisa desse caminho:

Somente um usuário (você) - $HOME/.profile , em que $ HOME é / home / username

Todos os usuários, exceto root - /etc/profile

raiz - /root/.profile

Então, para resumir, seu caminho deve ser definido em /home/r0xx4nne/.profile .

    
por Marty Fried 18.06.2012 / 06:38