Evita 'cd' lembrando links simbólicos percorridos

4

Digamos que você tenha um diretório ~ / mytool que use softlinks para / usr / local / mytool. Então cd mytool deixa seu diretório atual como ~ / mytool, o que pode fazer com que os scripts se comportem incorretamente. Existe uma maneira de evitar esse comportamento?

Com alguns googling, vejo que você pode conseguir isso da seguinte maneira:

cd $1 ; cd 'pwd -P'

Não há mudança para 'cd'? Variáveis de ambiente?

    
por Steve Bennett 24.01.2012 / 01:17

3 respostas

8

Se você digitar set -P no bash todos os comandos, como cd, o pwd seguirá o caminho físico. Senão você pode usar cd -P e pwd -P para alterações temporárias no comportamento padrão.

A partir do manpage do bash:

          -P      If  set,  the shell does not follow symbolic links when executing commands such as cd that change the cur-
                  rent working directory.  It uses the physical directory structure instead.  By default, bash  follows  the
                  logical chain of directories when performing commands which change the current directory.

Para tornar isso permanente, coloque-o no arquivo ~/.bashrc , por exemplo.

    
por 24.01.2012 / 01:31
4

"cd" é um recurso embutido na maioria dos shells. No bash, você pode obter o comportamento desejado, adicionando

set -P

em um script de inicialização (.bashrc, por exemplo).

    
por 24.01.2012 / 01:28
2

No Ubuntu / Debian (não tenho certeza sobre o BSD), cd -P symlink me coloca no caminho do symlink resolvido. (Mesmo comportamento que pwd -P)

Testado usando:

mkdir a
ln -s a b
cd -P b && pwd
    
por 24.01.2012 / 01:27