Existe uma maneira de encurtar (não remover) o caminho exibido no terminal por um alias

6

Eu quero algo assim:

"vivek@grishma:~/xxx/yyy/zzz/src$" a ser exibido como

"vivek@grishma:datasource$" onde de alguma forma eu teria predefinido "datasource" para ser um alias para o longo caminho acima.

usando o comando alias como

" alias datasource='~/xxx/yyy/zzz/src'"

é útil para navegação, mas não remove o caminho longo no prompt.

Isso é possível?

PS- Eu não quero que seja apenas "vivek @ grishma:" como então toda vez que eu deveria rodar o pwd para saber meu diretório de trabalho.

    
por Vivek V K 01.04.2014 / 15:53

2 respostas

6

Isso fará:

PS1='\u@\h:$(
    case $PWD in
       $HOME/xxx/yyy/zzz/src) echo "datasource ;; 
       *) echo "\w" ;; 
    esac
)$'

Isso dá a você a flexibilidade de definir outros diretórios especiais também.

Os aliases não o ajudarão aqui.

Para reduzir a duplicação, coloque todos os seus diretórios especiais em uma matriz e use-a para gerar seus aliases e também seu prompt. Coloque tudo isso no seu ~ / .bashrc:

declare -A labels=(
    [$HOME/xxx/yyy/zzz/src]=datasource
    [$HOME/foo/bar]=baz
)
for path in "${!labels[@]}"; do
    alias "${labels[$path]}"="$path"
done
function path_label () {
    local IFS=:
    if [[ ":${!labels[*]}:" == *:"$PWD":* ]]; then
        # we're in a "known" dir
        echo "${labels[$PWD]}"
    else
        return 1
    fi
}
PS1='\u@\h:$( path_label || echo "\w" )$'
    
por glenn jackman 01.04.2014 / 16:12
1

Coloque os seguintes scripts no seu ~/.bashrc

if [ "$(pwd)" == "$HOME/xxx/yyy/zzz/src" ]; then
    PS1='\u@\h:datasource$ '
else
    :
fi

Vá para o diretório ~/xxx/yyy/zzz/src e altere o prompt

. ~/.bashrc

Em outro diretório, para recuperar o prompt original, forneça novamente seu ~/.bashrc .

Eu não acho que você precise de um apelido para isso. Sempre você pode usar um apelido como

alias src='. ~/.bashrc'
    
por souravc 01.04.2014 / 16:25