টার্মিনাল কমান্ড প্রম্পট ওয়ার্কিং ডিরেক্টরি ছাঁটা


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
পছন্দ করুন কেবল এটি .brcrc ফাইলে যুক্ত করুন।
উপসর্গ

এটা অসাধারণ! আপনি অজগর প্রোগ্রামটি সম্পাদনা করলে তা স্বয়ংক্রিয়ভাবে আপডেট হয়: মিষ্টি!
N3sh

শান্ত! অবিলম্বে এই চুরি।
ফেরে

পাইথন 3 এর জন্য প্রায় এই কাজটি পেতে (...) মুদ্রণ (শেষ) মুদ্রণ আপডেট করুন, দুর্দান্ত টিপ, ভাগ করে নেওয়ার জন্য ধন্যবাদ !!
শান

69

আপনি যদি bash4 ব্যবহার করছেন (উবুন্টু 9.10 এবং আরও নতুনতে ব্যাশ 4 রয়েছে) তবে সবচেয়ে সহজ বিকল্পটি হল কেবলমাত্র 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

এই সমস্যাটির অন্য একটি উপায় হ'ল পিএস 1 এর মধ্যে একটি লাইন ব্রেক অন্তর্ভুক্ত করা, যাতে ওয়ার্কিং ডিরেক্টরি এবং প্রকৃত প্রম্পট পৃথক লাইনে উপস্থিত হয়, উদাহরণস্বরূপ:

PS1="\w\n>"

থিয়িসের অনুরূপ, আপনার পিএস 1 প্রম্পটটি পরিবর্তন করা নয়, কেবল আপনার কমান্ডটি একটি with দিয়ে শুরু করতে এবং এন্টার টিপুন । এটি কমান্ডটি পরবর্তী লাইনে 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 কে "~ /" রূপান্তর করা এবং $ পিডাব্লুডি হোম ডিরেক্টরিতে থাকা যদি 'দৈর্ঘ্যের' অংশ হিসাবে গণনা করা না হয় সে সম্পর্কে কিছু স্মার্ট যুক্ত করতে হবে।
মাইকেল বারার

1

@ জোও-পিন্টোর দুর্দান্ত উত্তরের সাথে এই ছোট সংযোজন ভার্চুয়াল পরিবেশের নাম যুক্ত করে যখন আপনি 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) > "

আপনার এখনও পিএস 1 এখানে রফতানি করার দরকার নেই ?? দুর্দান্ত লাগছে।
ক্রিস সুলিভান

হ্যাঁ, আপনার উত্তরটিতে বিস্তারিত হিসাবে আপনার এখনও পিএস 1 রফতানি করতে হবে। আমি কেবল কার্যকারী ডিরেক্টরিটি যুক্ত করছি :-)
ম্যানুয়েল

0

আমি এটি সবচেয়ে পছন্দ করি, PS1="[\W]\\$ "


ওপি উল্লেখ করেছে যে তারা এতে ছেদ করে না।
wjandrea

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

প্রয়াস বা টার্মিনাল রঙের কোড আরো এখানে । আপনার টার্মিনালটি স্বয়ংক্রিয়ভাবে কী রঙ ব্যবহার করে তা খুঁজে পাওয়ার কিছু উপায় সম্ভবত রয়েছে তবে এটি কী হতে পারে সে সম্পর্কে আমার কোনও ধারণা পাওয়া যায়নি।

শেবাং লাইনের exportসাথে .bashrc এ অন্তর্ভুক্তির জন্য লাইনটি তখন পরিণত হয়:

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

এনবি 1 এই "\ ই" এস্কেপ কোডগুলি সর্বদা "\ [... \]" এ আবদ্ধ থাকতে হবে, অন্যথায় লাইন-রিটার্নগুলি সম্পূর্ণ গণ্ডগোল হয়ে যায়।

আপনার সম্পূর্ণ পথটি পেতে যে কোনও সময় NB2 এ যান

... $ pwd 

অবশ্যই...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.