Como encontrar o diretório de trabalho atual?

3

Quando tento encontrar o diretório de trabalho atual em um prompt de comando do Linux (usando "pwd"), ele mostra o diretório com os links simbólicos incluídos. Por exemplo, se eu fizer um link simbólico e usá-lo para visitar esse diretório:

ln -s /mnt/backup /home/biotech/backup
cd /home/biotech/backup
pwd

Isto mostrará "/ home / biotech / backup" em vez de "/ mnt / backup". Isso acontece no Ubuntu e no Cygwin.

Qual comando posso usar para ver o último, o diretório "real"?

    
por Colin 29.06.2009 / 16:48

6 respostas

15

perheps:

pwd -P 

da ajuda:

"- P: O nome do caminho impresso não conterá links simbólicos."

    
por 29.06.2009 / 16:50
5
/bin/pwd

Ele não sabe onde você esteve ou como chegou lá, então funciona desde os primeiros princípios.

    
por 29.06.2009 / 16:49
5

Para resolver este problema para o caso geral (ou seja, não apenas o diretório atual), use:

readlink -f PATH
    
por 29.06.2009 / 16:51
3

Do shell

pwd -P

da userland.

/bin/pwd
    
por 29.06.2009 / 16:53
0

Para obter um comando pwd -P mais portátil (compatível com POSIX), poderíamos usar o shell interno normal command :

# cf. http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_06

command -p pwd -P
#builtin command -p pwd -P  
#alias pwd=echo; PATH="$(command -p getconf PATH)" 'pwd' -P
    
por 18.02.2013 / 18:31
0

No windows7, eu uso cmd com vários hardlinks NTFS para pastas, cygwin, bash e perl estão no meu caminho, mas pwd -P não funciona como sugerido acima. Este script percorre a árvore e desvia os links para realdir:

CHN=$(cygpath -wam .)
echo $CHN
while true ;do
  OLD=$DIR
  DIR=$(cygpath -wam .) 
  if [[ ( -n "$OLD" ) && !( $OLD =~ $DIR* )]] ;then
    SYM=$DIR/${OLD##*/}
    CHN=$(echo $CHN | perl -lpe "s,$OLD,$SYM,")
    echo $CHN
  fi
  case $DIR in [A-Z]:/ | [A-Z]:/cyg* ) break ;; esac # TOPLEVEL
  cd $DIR/..
done 
    
por 06.11.2016 / 10:59