apara o diretório de trabalho do prompt de comandos do terminal

32

Ao usar o terminal em uma estrutura de pastas profundas, às vezes, o prompt pode ocupar a maior parte da linha. Existe alguma maneira em que eu possa cortar o diretório de trabalho? Eu sei que posso fazer

PS1="\W >"

para imprimir apenas o diretório atual e não o caminho completo, mas existe uma maneira de ter algo como:

/home/smauel/de...ther/folder >
    
por smauel 16.12.2010 / 12:46

5 respostas

26

Crie um pequeno script python que implemente a lógica de corte desejada.

Exemplo: ~ / .short.pwd.py

import os
from socket import gethostname
hostname = gethostname()
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
if len(pwd) > 33:
    pwd = pwd[:10]+'...'+pwd[-20:] # first 10 chars+last 20 chars
print '[%[email protected]%s:%s] ' % (username, hostname, pwd)

Agora teste-o a partir de um terminal:

export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'

Se você está bem com o resultado, basta anexar o comando ao seu ~ / .bashrc

    
por João Pinto 16.12.2010 / 13:54
59

Se você estiver usando o bash4 (o Ubuntu 9.10 e o mais novo tem o bash4), a opção mais fácil é simplesmente definir a variável PROMPT_DIRTRIM. por exemplo:

PROMPT_DIRTRIM=2

Por exemplo, semelhante ao exemplo de João Pinto (que funciona em versões mais antigas e garante que o componente do caminho nunca tenha mais de 30 caracteres), você poderia fazer algo assim:

PS1='[\[email protected]\h:$(p=${PWD/#"$HOME"/~};((${#p}>30))&&echo "${p::10}…${p:(-19)}"||echo "\w")]$ '
    
por geirha 08.03.2011 / 22:19
9

Outra maneira de contornar esse problema é incluir uma quebra de linha no PS1, para que o diretório de trabalho e o prompt real apareçam em linhas separadas, por exemplo:

PS1="\w\n>"
    
por ak2 16.12.2010 / 13:22
2

Adicione isso ao final do seu ~/.bashrc

split_pwd() {
        # Only show ellipses for directory trees -gt 3
        # Otherwise use the default pwd as the current \w replacement
        if [ $(pwd | grep -o '/' | wc -l) -gt 3 ]; then
                pwd | cut -d'/' -f1-3 | xargs -I{} echo {}"/../${PWD##*/}"
        else
                pwd
        fi
}


export PS1="$(split_pwd) > "

É verdade que isso provavelmente poderia ser mais limpo, mas eu queria dar uma olhada nisso.

Saída esperada para diretórios com mais de três camadas de profundidade.

/home/chris/../Node Projects >

Saída esperada para diretórios do desktop e vice-versa.

/home/chris/Desktop > 
/home/chris >  
/home
    
por Chris Sullivan 06.01.2017 / 08:12
0

Eu gosto mais desta, PS1="[\W]\$ "

    
por Medya 03.03.2014 / 09:13