답변:
원하는 트리밍 로직을 구현하는 작은 파이썬 스크립트를 만듭니다.
예: ~/.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 '[%s@%s:%s] ' % (username, hostname, pwd)
이제 터미널에서 테스트하십시오.
export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'
결과가 정상이면 명령을에 추가하십시오 ~/.bashrc
.
bash4 (Ubuntu 9.10 이상에는 bash4가 있음)를 사용하는 경우 가장 쉬운 옵션은 PROMPT_DIRTRIM 변수를 설정하는 것입니다. 예 :
PROMPT_DIRTRIM=2
João Pinto의 예와 비슷한 것 (이전 bash 버전에서 작동하고 경로 구성 요소가 30자를 넘지 않도록합니다)의 경우 다음과 같이 할 수 있습니다.
PS1='[\u@\h:$(p=${PWD/#"$HOME"/~};((${#p}>30))&&echo "${p::10}…${p:(-19)}"||echo "\w")]\$ '
이것을 바닥에 추가하십시오 ~/.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) > "
분명히 이것은 아마도 더 깨끗할 수는 있지만 균열을 원했습니다.
3 층 이상의 디렉토리에 대한 예상 출력입니다.
/home/chris/../Node Projects >
데스크탑 및 디렉토리에서 디렉토리에 대한 예상 출력입니다.
/home/chris/Desktop >
/home/chris >
/home
@ joão-pinto의 훌륭한 답변에 대한 이 작은 추가 사항 은 workon
명령 을 실행할 때 가상 환경 이름을 추가합니다 .
import os
from platform import node
hostname = node().split('.')[0]
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
# check for the virtualenv
ve = os.getenv('VIRTUAL_ENV')
if ve:
venv = '(`basename \"$VIRTUAL_ENV\"`)'
else:
venv = ''
if len(pwd) > 33:
pwd = pwd[:10]+'...'+pwd[-20:] # first 10 chars+last 20 chars
print '%s[%s@%s:%s] ' % (venv, username, hostname, pwd)
Cris Sullivan 의 답변을 기반으로 하지만 ~
홈 폴더를 유지하십시오.
get_bash_w() {
# Returns the same working directory that the \W bash prompt command
echo $(pwd | sed 's@'"$HOME"'@~@')
}
split_pwd() {
# Split pwd into the first element, elipsis (...) and the last subfolder
# /usr/local/share/doc --> /usr/.../doc
# ~/project/folder/subfolder --> ~/project/../subfolder
split=2
W=$(get_bash_w)
if [ $(echo $W | grep -o '/' | wc -l) -gt $split ]; then
echo $W | cut -d'/' -f1-$split | xargs -I{} echo {}"/../${W##*/}"
else
echo $W
fi
}
export PS1="\$(split_pwd) > "
약간 (Python3의 경우) 업데이트 하고 BASH 프롬프트 (Linux Mint 18.3의 경우) 에 따라 프롬프트에 색상을 추가 하도록 선택한 답변 을 향상 시키십시오 .
#! /usr/bin/python3
import os, getpass
from socket import gethostname
username = getpass.getuser()
hostname = gethostname()
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
if len(pwd) > 40:
# first 10 chars+last 30 chars
pwd = pwd[:10] + '...' + pwd[-30:]
# colours as per my current BASH Terminal:
# username + hostname: bold green
# path and $: bold blue
print( '\[\e[;1;32m\]%s@%s \[\e[;1;34m\]%s $\[\e[0m\] ' % (username, hostname, pwd) )
BASH 터미널의 색상 코드에 대한 자세한 내용은 여기를 참조하십시오 . 터미널이 자동으로 사용하는 색상을 찾는 방법이 있을지 모르지만 그게 무엇인지 알 수는 없습니다.
shebang 줄을 사용하면 export
.bashrc에 포함될 줄은 다음과 같습니다.
export PROMPT_COMMAND='PS1="$(~/.local/bin/manage_prompt.py)"' # adjust path to .py file
NB1이 "\ e"이스케이프 코드는 항상 "\ [... \]"로 묶어야합니다. 그렇지 않으면 줄 바꿈이 완전히 엉망이됩니다.
NB2는 언제라도 전체 경로를 얻을 수 있습니다.
... $ pwd
물론이야...
~/.bashrc
? 파일 맨 아래에 마지막 줄을 붙여 넣을 것입니까?