it-swarm-tr.com

terminal komutunu kırp Bilgi istemi çalışma dizini

Terminali derin bir klasör yapısında kullanırken bazen Bilgi İstemi satırın çoğunu alabilir. Çalışma dizinini kırpmamın bir yolu var mı? Yapabileceğimi biliyorum

PS1="\W >"

yalnızca geçerli dizini yazdırmak ve tam yolu yazdırmamak, ancak aşağıdaki gibi bir şeye sahip olmanın bir yolu var:

/home/smauel/de...ther/folder >
41
smauel

İstenen kırpma mantığını uygulayan küçük bir python komut dosyası oluşturun.

Misal: ~/.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)

Şimdi bir terminalden test edin:

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

Sonuçta sorun yoksa, komutu ~/.bashrc.

31
João Pinto

Bash4 kullanıyorsanız (Ubuntu 9.10 ve daha yenisi bash4), en kolay seçenek sadece Prompt_DIRTRIM değişkenini ayarlamaktır. Örneğin.:

Prompt_DIRTRIM=2

João Pinto'nun örneğine benzer bir örnek için (eski bash sürümlerinde çalışır ve yol bileşeninin hiçbir zaman 30 karakterden uzun olmamasını sağlar), şöyle bir şey yapabilirsiniz:

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

Bu sorunun etrafındaki başka bir yol da, PS1'e bir satır sonu eklemektir, böylece çalışma dizini ve gerçek Bilgi İstemi ayrı satırlarda görünür, örneğin:

PS1="\w\n>"
11
ak2

Bunu ~/.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) > "

Kuşkusuz bu muhtemelen daha temiz olabilirdi, ama ben bir çatlak almak istedim.

Üç katmandan daha derin dizinler için beklenen çıktı.

/home/chris/../Node Projects >

Masaüstünden ve arkadan dizinler için beklenen çıktı.

/home/chris/Desktop > 
/home/chris >  
/home
4
Chris Sullivan

Cris Sullivan 'ın cevabına dayanarak, ~ ana klasör için

get_bash_w() {
  # Returns the same working directory that the \W bash Prompt command
  echo $(pwd | sed '[email protected]'"$HOME"'@[email protected]')
}

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) > "
1
Manuel

@ João-pinto'nun mükemmel answer öğesine yapılan bu küçük ekleme, workon komutunu çalıştırdığınızda sanal ortam adını ekler.

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[%[email protected]%s:%s] ' % (venv, username, hostname, pwd)
1
katahdin

Sadece biraz güncellemek için (Python3 için) ve seçilen cevabı geliştirmek İsteme renk eklemek için bir BASH İstemine göre (yine de Linux Mint 18.3'te):

#! /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%[email protected]%s \[\e[;1;34m\]%s $\[\e[0m\]  ' % (venv, username, hostname, pwd) )

Bir BASH Terminalindeki renk kodları hakkında daha fazla bilgi burada . Muhtemelen Terminal'inizin hangi renkleri otomatik olarak kullandığını öğrenmenin bir yolu var, ancak bunun ne olabileceğine dair bir fikrim yok.

Shebang satırı ile .bashrc'ye dahil edilmek üzere export satırı daha sonra:

export Prompt_COMMAND='PS1="$(~/.local/bin/manage_Prompt.py)"' # adjust path to .py file

NB1 bu "\ e" kaçış kodları her zaman "\ [... \]" içine alınmalıdır, aksi takdirde satır döndürmeleri tamamen bozulur.

NB2 herhangi bir zamanda tam yol almak için sadece gitmek

... $ pwd 

elbette...

0
mike rodent

bu İstem geçerli satır dışındaki tüm adları kısaltır:

user:/h/t/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}

PS1='\u:$$(eval "sps")/\W\$ '
0
Travis S

Bunu en çok seviyorum, PS1="[\W]\\$ "

0
Medya