Se o autor estava tentando pegá-lo falando sobre essa cadeia literal (sem expansão de shell) como um caminho, então é um caminho relativo ( mkdir -p './~/Documents'
). Caso contrário:
É um caminho absoluto , porque a resolução não depende do funcionamento atual do processo diretório. Caminho relativo sempre significa relativo ao diretório de trabalho do processo. Ou no caso de alvos de links simbólicos, relativos à localização do link simbólico. ( gcc -> gcc-5.2
vs. gcc -> /usr/bin/gcc-5.2
). Isso é importante para montagens NFS e outros casos em que você pode obter o mesmo symlink através de diferentes caminhos absolutos. por exemplo,
/net/tesla/home/peter/foo -> bar # always works from other machines
/net/tesla/home/peter/foo -> /home/peter/bar # references my home dir on the local machine, not tesla.
Algumas vezes o Debian instalará links simbólicos para ../../doc/whatever/whatever
, ao invés de um alvo de symlink absoluto, então funciona quando o NFS é montado em outro lugar, ou quando se olha para um chroot sem chroot(8)
ing nele.
Todo processo Unix tem seu próprio cwd. O comando pwd
existe apenas para imprimi-lo.
veja: link para saber mais sobre como alterar diretórios com as chamadas do sistema POSIX.
Como todos já disseram, ~
é expandido pelo shell antes que o caminho seja usado para qualquer coisa. Usar ~/bin/myprog
em um script de shell fará com que funcione de maneira diferente para diferentes usuários. A diferença entre ~/bin/foo
e /home/peter/bin/foo
é que um deles codificou permanentemente o local, enquanto o outro o parametrizou. É um erro (IMO) chamar a versão ~
de um caminho relativo.
Falar sobre as coisas ser "relativo a uma variável de ambiente" é confuso. É uma prática ruim usar diferentes significados de termos em inglês que tenham significados técnicos específicos no contexto em que você os usa.
Em um sistema corrompido, com HOME=a/relative/path
, ~/foo
se expandiria para um caminho relativo. Isso não seria uma configuração utilizável.