Modifica: questo è un duplicato di /programming/998626/meaning-of-tilde-in-linux-bash-not-home-directory/ . Non ho la reputazione di chiudere questa domanda come duplicata.
Non mi riferisco a ~come nella directory home ma piuttosto a questo:
$ ls ~foo/bar
/some/mount/point/foo/bar
Tuttavia, se lo provo con un punto di montaggio diverso, ad esempio:
$ 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
Come si ~chiama in questo contesto? Come funziona?
Modifica: ulteriori informazioni basate su alcuni dei commenti seguenti:
- Posso attestare che
foonon è un nome utente sul mio sistema. - Quando si tenta di completare automaticamente
ls -lah ~non vengono visualizzate tutte le opzioni. cioè sono in gradocd ~qux, quandoquxnon viene visualizzato nel completamento automatico. Ancoraquxuna volta non è un utente nel mio sistema. - Se è importante
/some/mount/pointè una condivisione di rete. - Tutti i dettagli suggeriscono alcuni Path Muckery con nome, una caratteristica della shell Z di espansione del percorso, ma funziona anche in bash, che apparentemente non supporta cose come i percorsi con nome della shell Z.
/some/mount/pointsicuramente non è la mia directory home. cd ~mi porta a /Users/$username/- che partite$HOME
zshsembra utilizzare anche la tilde per indicare le directory con nome.
bash -c "ls ~foo/bar") - che non ha directory nominate. Inoltre anche all'interno di zsh, se ispeziono il file env, non vedo alcuna directory impostata. Sono su Mac OS e ritengo che questa sia una funzionalità specifica di OS X.
~foo. Prendi la stringa attuale (non l'esempio foo) e fallo grep "actual username" /etc/passwd. ~textdovrebbe funzionare solo per i nomi utente di accesso possibili secondo il manuale bash (non significa necessariamente che sia effettivamente in grado di accedere; nel caso di utenti del sistema come ~lp, ad esempio). In tutti i miei test, ~stringcorrisponde a stringessere username.
~fooè la home directory dell'utentefoo. Se l'utente non è specificato, l'utente corrente è l'impostazione predefinita.