O PS1 do Bash mostra o nome do diretório original e não o symlink?

2

Atualmente eu tenho PS1='\W' , mas quando em um diretório simbólico link'd, o prompt mostra o nome do link simbólico, como posso fazer o PS1 mostrar o nome do diretório original?

    
por Petruza 08.05.2012 / 21:47

1 resposta

4

No Linux, você pode usar o seguinte:

export PS1='$( readlink -f . )'

Exemplo:

$ export PS1='$( readlink -f . ) \$ '
/home/danielbeck $ ln -s /etc foo
/home/danielbeck $ cd foo
/etc $ _

Observe que você ainda estará em /home/danielbeck/foo para todo o resto, como resolver os diretórios pais com cd .. , portanto, continue o exemplo:

/etc $ cd ..
/home/danielbeck $ _

Outra opção pode ser substituir cd por uma função que entra no diretório canônico em vez do link simbólico, algo como:

function cd {
    if [[ $# -ne 1 ]] ; then
        builtin cd "$@"
    elif [[ "$1" = "-" ]] ; then
        builtin cd -
    else
        builtin cd "$( readlink -f "$1" )"
    fi
}

Isso também pode funcionar para qualquer cd argumentos e suporta até CDPATH :

function cd {
    builtin cd "$@"
    builtin cd "$( readlink -f . )"
}
    
por 08.05.2012 / 21:52