Domanda

Sono un po 'confuso come soft link lavorare in UNIX. Vedere l'esempio.

% cd /usr/local/
% ls -la
total 6
drwxr-xr-x   2 root     root         512 Jan 19 15:03 .
drwxr-xr-x  41 root     sys         1024 Jan 20 16:24 ..
lrwxrwxrwx   1 root     root          38 Jan 19 15:03 java -> /otherDir/java/jdk1.6.0_17 **<- this is a soft link**

% cd java **<- move to the softlink**

% pwd
/usr/local/java **<- the current location, say LOCATION_A**

% cd /otherDir/java/jdk1.6.0_17/ **<-move to the location of the softlink**

% pwd
/otherDir/java/jdk1.6.0_17 **<- the new current location, say LOCATION_B**

Non è forse questo un problema che, anche se è LOCATION_A LOCATION_B, hanno strade diverse?

C'è un comando (diverso da pwd) che darà la reale posizione di un file (non solo come l'utente andare lì).

Mi sembra come pwd è solo la somma di cd di un utente. NON la loro posizione attuale.

È stato utile?

Soluzione

Questo si comporta come questo con uno scopo. Se voi cd per /a/b/c/d e poi cd per .. allora si realisticamente aspettare di essere in /a/b/c. Se c sembra essere un link simbolico (o link simbolico in termini unix - ma link non morbido) che ti porta a /f/g/h, con il comportamento che si desidera avere finirebbe in /f/g e quindi non è (o qualsiasi altro programma) sarebbe capire come sia arrivato lì.

Altri suggerimenti

Prova pwd -P. Non è "altro da pwd", ma fa il trucco, almeno sul mio bash 4.0.35 su Fedora 12. YMMV.

Aggiornamento:. Anche lavora con sh, così sembra essere portatile

È possibile utilizzare readlink sulla directory di lavoro corrente per ottenere il vero nome della directory:

readlink `pwd`

Normalmente, pwd dovrebbe tornare /usr/local/java nell'ultima riga, se ho ben capito il tuo esempio. Ma alcune conchiglie hanno un costruire in Comando pwd che cerca di essere più link simbolici "intelligenti" di movimentazione nella directory di lavoro corrente.

Prova /bin/pwd, si fa a ottenere altri risultati?

realpath fa quello che si desiderare.

Non è possibile ottenere assolutamente il vostro percorso in ogni circostanza. Questo è un po 'strano, ma una variazione di questo (più chroot e setuid) è talvolta usato per bloccando un processo.

$ mkdir -p /tmp/a/b
$ cd /tmp/a/b
$ rmdir /tmp/a/b
$ chmod 0 /tmp/a
$ rmdir /tmp/a
$ ls ..
ls: cannot open directory ..: Permission denied
$ ls -al
total 0
$ pwd -P
pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top