回答:
目的のトリミングロジックを実装する小さなPythonスクリプトを作成します。
例: ~/.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ãoPintoの例に似たもの(古い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:]
# Virtual environment being used? Essential not to omit!
ve = os.getenv('VIRTUAL_ENV')
venv = '(`basename \"$VIRTUAL_ENV\"`)' if ve else ''
# colours as per my current BASH Terminal:
# username + hostname: bold green
# path and $: bold blue
print( '\[\e[;1;32m\]%s%s@%s \[\e[;1;34m\]%s $\[\e[0m\] ' % (venv, username, hostname, pwd) )
BASHターミナルのカラーコードの詳細はこちら。ターミナルが自動的に使用する色を見つける方法はおそらくありますが、それが何であるかはわかりません。
シェバン行ではexport
、.bashrcに含める行は次のようになります。
export PROMPT_COMMAND='PS1="$(~/.local/bin/manage_prompt.py)"' # adjust path to .py file
NB1これらの「\ e」エスケープコードは、常に「\ [... \]」で囲む必要があります。そうしないと、改行が完全に台無しになります。
NB2を使用すると、いつでもフルパスを取得できます
... $ pwd
もちろん...
~/.bashrc
か?ファイルの最後にその最後の行を貼り付けるだけでしょうか?