Editar: Esta é uma duplicata do /programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ . Não tenho reputação de fechar esta pergunta como duplicada.
Não estou me referindo ~como no diretório inicial, mas sim:
$ ls ~foo/bar
/some/mount/point/foo/bar
No entanto, se eu tentar com um ponto de montagem diferente, por exemplo:
$ mount | ag "/dev "
devfs on /dev (devfs, local, nobrowse)
$ ls /dev/stdin
/dev/stdin
$ ls ~stdin
zsh: no such user or named directory: stdin .
# bash has a similar error message:
ls: ~stdin: No such file or directory
Como é ~chamado neste contexto? Como funciona?
Editar: Mais informações com base em alguns dos comentários abaixo:
- Posso atestar que
foonão é um nome de usuário no meu sistema. - Ao tentar concluir automaticamente,
ls -lah ~nem todas as opções são mostradas. ou seja, eu consigocd ~qux, quandoquxnão aparece no preenchimento automático. Novamente,quxnão é um usuário no meu sistema. - Se isso importa
/some/mount/pointé um compartilhamento de rede. - Todos os detalhes sugerem algum caminho chamado muckery, um recurso de shell Z da expansão do nome do caminho, mas isso também funciona no bash, que aparentemente não suporta coisas como os caminhos nomeados do shell Z.
/some/mount/pointdefinitivamente não é o meu diretório pessoal. cd ~me leva para /Users/$username/--que combina com$HOME
zshparece também usar o til para indicar diretórios nomeados.
bash -c "ls ~foo/bar") - que não possui diretórios nomeados. Além disso, mesmo no zsh, se eu inspecionar o arquivo env, não vejo nenhum diretório nomeado configurado. Eu estou no Mac OS e eu sinto que este é alguma característica específica para OS X.
~foo. Pegue a string real (não o exemplo foo) e faça grep "actual username" /etc/passwd. ~textdeve funcionar apenas para nomes de usuário de login possíveis, de acordo com o manual do bash (não significa necessariamente que é realmente capaz de efetuar login; no caso de usuários do sistema, como ~lp, por exemplo). Em todos os meus testes, o ~stringcorresponde a stringser nome de usuário.
~fooé o diretório inicial do usuáriofoo. Se o usuário não for especificado, o usuário atual é o padrão.