टर्मिनल कमांड प्रॉम्प्ट वर्किंग डायरेक्टरी ट्रिम करें


39

एक गहरी फ़ोल्डर संरचना में टर्मिनल का उपयोग करते समय कभी-कभी प्रॉम्प्ट लाइन के अधिकांश भाग को ले सकता है। क्या कोई तरीका है जिसमें मैं काम करने वाली निर्देशिका को ट्रिम कर सकता हूं? मुझे पता है कि मैं कर सकता हूं

PS1="\W >"

केवल वर्तमान निर्देशिका मुद्रित करने के लिए और पूर्ण पथ नहीं है, लेकिन क्या ऐसा कुछ करने का एक तरीका है:

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

जवाबों:


30

एक छोटा अजगर स्क्रिप्ट बनाएं जो वांछित ट्रिमिंग तर्क को लागू करता है।

उदाहरण: ~/.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


स्पष्ट पूछने के लिए नहीं, लेकिन हम वास्तव में कमांड को कैसे जोड़ते हैं ~/.bashrc? क्या यह सिर्फ उस आखिरी पंक्ति को फाइल के नीचे चिपकाना होगा?
फ्लोटिंगरॉक

1
@FloatingRock सही है। बस इसे .bashrc फ़ाइल में जोड़ें।
उपसर्ग

यह भी खूब रही! यदि आप अजगर कार्यक्रम को संपादित करते हैं, तो यह स्वचालित रूप से अपडेट होता है: मीठा!
N3sh

ठंडा! तुरंत यह चुरा लिया।
16

अद्यतन कि पिछले प्रिंट ... प्रिंट करने के लिए (...) इस काम के रूप में लगभग अजगर 3 के लिए भी है, महान टिप, साझा करने के लिए धन्यवाद !!
शॉन

69

यदि आप bash4 (Ubuntu 9.10 और new में bash4) का उपयोग कर रहे हैं, तो सबसे आसान विकल्प सिर्फ PROMPT_DIRTRIM वैरिएबल सेट करना है। उदाहरण के लिए:

PROMPT_DIRTRIM=2

जोओ पिंटो के उदाहरण के समान, (जो पुराने बैश संस्करणों में काम करेगा और यह सुनिश्चित करता है कि पथ घटक 30 वर्णों से अधिक लंबा नहीं है), आप ऐसा कुछ कर सकते हैं:

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

4
PROMPT_DIRTRIM के लिए दस्तावेज़ यहां देखे जा सकते हैं: gnu.org/software/bash/manual/html_node/Bash-Variables.html
बेन अमोस

11

उस समस्या के आसपास एक और तरीका है PS1 में एक लाइन ब्रेक को शामिल करना, ताकि वर्किंग डायरेक्टरी और वास्तविक प्रॉम्प्ट अलग-अलग लाइनों पर दिखाई दें, उदाहरण के लिए:

PS1="\w\n>"

थीस के समान, अपने PS1 प्रॉम्प्ट को बदलने के लिए नहीं है, लेकिन सिर्फ एक और a के साथ अपनी कमांड शुरू करने के लिए Enter दबाएं । यह PS2 प्रॉम्प्ट के साथ अगली पंक्ति पर शुरू करने के लिए कमांड को मजबूर करता है, जो आमतौर पर > है ... (मैंने इसके बारे में तब तक नहीं सोचा था जब तक मैंने आपका सुझाव नहीं देखा :)
पीटर।

4

इसे अपने नीचे जोड़ें ~/.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) > "

बेशक यह शायद क्लीनर हो सकता है, लेकिन मैं इस पर एक दरार प्राप्त करना चाहता था।

तीन से अधिक परतों की निर्देशिका के लिए अपेक्षित आउटपुट।

/home/chris/../Node Projects >

डेस्कटॉप और बैक से निर्देशिकाओं के लिए अपेक्षित आउटपुट।

/home/chris/Desktop > 
/home/chris >  
/home

सुंदर! मुझे केवल $ HOME को "~ /" में बदलने के बारे में कुछ स्मार्ट जोड़ने की जरूरत है और मत गिनो कि 'लंबाई' के हिस्से के रूप में अगर $ PWD घर की निर्देशिका के अंतर्गत है।
माइकल बर्ट

1

जब आप कमांड चलाते हैं तो यह @ 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)

आह, अच्छा विचार ... मेरे रंग कोड के साथ गठबंधन शायद?
माइक कृंतक

1

क्राइस सुलिवन के जवाब पर आधारित है , लेकिन ~होम फोल्डर के लिए रखते हुए

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

क्या आपको अभी भी यहाँ PS1 को निर्यात करने की आवश्यकता नहीं है ?? अच्छा लग रहा है।
क्रिस सुलिवन

हां, आपको अभी भी PS1 को निर्यात करने की आवश्यकता है, जैसा कि आपने अपने उत्तर में विस्तृत किया है। मैं सिर्फ वर्किंग डायरेक्टरी :-)
मैनुअल

0

मुझे यह सबसे ज्यादा पसंद है, PS1="[\W]\\$ "


ओपी ने उल्लेख किया कि वे उस में इंटरस्टेड नहीं हैं।
वेजेंड्रिया

0

यह संकेत वर्तमान लाइन को छोड़कर सभी नामों को छोटा करता है:

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

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

0

बस थोड़ा सा अपडेट करने के लिए (पायथन 3 के लिए) और BASH प्रॉम्प्ट के अनुसार प्रॉम्प्ट में रंगों को जोड़ने के लिए चयनित उत्तर को बढ़ाएं (वैसे भी लिनक्स मिंट 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 टर्मिनल में रंग कोड पर अधिक । संभवतः यह पता लगाने का कोई तरीका है कि आपका टर्मिनल स्वचालित रूप से किन रंगों का उपयोग करता है, लेकिन मुझे ऐसा कोई सुराग नहीं मिला है जो कि हो सकता है।

शबांग लाइन के साथ export.bashrc में शामिल करने के लिए लाइन बन जाती है:

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

NB1 इन "\ e" एस्केप कोड को हमेशा "\ [... \" में संलग्न किया जाना चाहिए, अन्यथा लाइन-रिटर्न पूरी तरह से गड़बड़ हो जाता है।

किसी भी समय अपना पूरा रास्ता पाने के लिए NB2 बस जाएं

... $ pwd 

बेशक...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.