ฉันจะทำให้พรอมต์บรรทัดคำสั่ง (ทุบตี) สั้นลงได้อย่างไร


167

ปัจจุบันคือ:

michael@Castle2012-Ubuntu-laptop01:~/Dropnot/webs/rails_v3/linker/spec/controllers$

นอกการเปลี่ยนชื่อเครื่องและโครงสร้างไดเรกทอรีของฉัน ...

ฉันจะทำให้มันเป็นอย่างนี้ได้อย่างไร:

michael:controllers$

คำตอบ:


241

หากต้องการเปลี่ยนสำหรับอินสแตนซ์เทอร์มินัลปัจจุบันเท่านั้น

เพียงแค่ใส่PS1='\u:\W\$ 'แล้วกด Enter


หากต้องการเปลี่ยนเป็น "ถาวร"

ในของคุณ~/.bashrcค้นหาส่วนต่อไปนี้:

ถ้า ["$ color_prompt" = ใช่]; แล้วก็
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ ยู @ \ ชั่วโมง \ [\ 033 [00M \]: \ [\ 033 [01; 34m \] w \ \ [\ 033 [00m \] \ $ '
อื่น
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $'
Fi

ลบ@\hและแทนที่\wด้วยตัวพิมพ์ใหญ่\Wเพื่อให้กลายเป็น:

ถ้า ["$ color_prompt" = ใช่]; แล้วก็
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ U \ [\ 033 [00M \]: \ [\ 033 [01; 34m \] \ W \ [\ 033 [00m \] \ $ '
อื่น
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u: \ W \ $'
Fi

บันทึกออกจากปิดเทอร์มินัลแล้วเริ่มอีกอันเพื่อดูผลลัพธ์


ตัวเลือกมากมาย!

  • ดูที่นี่สำหรับวิธีการที่กว้างขวางยิ่งขึ้นพร้อมตัวเลือกอื่น ๆ อีกมากมาย
  • ดูคำตอบนี้สำหรับการใช้สคริปต์ Python ขนาดเล็กเพื่อตั้งค่าพรอมต์เพื่อให้การตัดทอนเกิดขึ้นเฉพาะเมื่อคุณอยู่ลึกในโครงสร้างไดเรกทอรี

1
นอกจากนี้คุณยังสามารถมีข้อมูลจำนวนมาก ... จากนั้นส่งคืนรถที่จุดสิ้นสุดเช่นเดียวกับในunix.stackexchange.com/q/88780/10043
Michael Durrant

มีวิธีที่จะทำให้โลกนี้หรือไม่? กล่าวอีกนัยหนึ่งถ้าฉัน sudo กับผู้ใช้รายอื่นมีการตั้งค่านี้ดำเนินการ แต่สำหรับตัวเองเท่านั้น (เช่นไม่ใช่สำหรับผู้ใช้เมื่อพวกเขาใช้บัญชีตามปกติ)?
ctote

เพื่อที่จะมี. bashrc ที่ใช้ร่วมกันซึ่งทำงานได้ทั้ง Linux และ OSX ฉันได้เปลี่ยนไปใช้unix.stackexchange.com/a/127800/10043
Michael Durrant

ie HOST='\033[02;36m\]\h' HOST=' '$HOST parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; } TIME='\033[01;31m\]\t \033[01;32m\]' LOCATION=' \033[01;34m\]pwd | sed "s # (/ [^ /] \ {1, \} / [^ /] \ {1, \} / [^ /] \ {1, \} /). * (/ [^ /] \ { 1, \} / [^ /] \ {1, \}) / \ {0,1 \} # \ 1_ \ 2 # g "' BRANCH=' \033[00;33m\]$(parse_git_branch)\[\033[00m\]\n\$ ' PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2='\[\033[01;36m\]>'
Michael Durrant

แต่ดูคำตอบสำหรับรหัสจริงที่จะใช้
Michael Durrant

104

เรียกใช้รหัสนี้ในเทอร์มินัลปัจจุบัน

PROMPT_DIRTRIM=3

ตอนนี้ bash prompt จะแสดงเฉพาะ 3 ชื่อไดเรกทอรีล่าสุดเท่านั้น คุณสามารถเลือก 1 เพื่อแสดงเฉพาะไดเรกทอรีปัจจุบัน ข้อมูลเพิ่มเติมสามารถดูได้ในเอกสาร GNU

ผลกระทบ:

/var/lib/apt/lists# PROMPT_DIRTRIM=3
/.../lib/apt/lists# 

หากคุณต้องการทำอย่างถาวรเพิ่มบรรทัดต่อไปนี้~/.bashrcในตอนต้น:

PROMPT_DIRTRIM=3

หรือตัวเลขอื่นที่มากกว่าศูนย์


7
เพียง sidenote: ต้องใช้ Bash 4
Stefan Lasiewski

ดี ... ฉันได้เพิ่ม bach_alias สำหรับสิ่งนี้ (ด้วยฟังก์ชั่น) promptdir() { PROMPT_DIRTRIM=$1; }เพื่อทำให้การใช้ชีวิตง่ายขึ้น ...
dgoosens

18

นี่คือการตั้งค่าที่ฉันต้องการ:

เพิ่มใน ~/.bashrc

PS1='[\u@\h \W]\$ '    

ดูเหมือนว่านี้:

[user@hostname dirname]$

(มีช่องว่างหลัง$เครื่องหมาย)


ฉันจะเพิ่มช่องว่างระหว่างแต่ละคำได้อย่างไร นอกจากนี้ฉันสามารถสีมันได้หรือไม่
Daniel Springer

6

ส่วนตัวฉันต้องการเห็นเฉพาะโฟลเดอร์ปัจจุบันใน bash prompt ฉันสามารถทำได้ด้วยคำสั่งต่อไปนี้:

PS1='\W\$ '

หากคุณต้องการให้มันมีผลหลังจากการเริ่มต้นแต่ละครั้งให้เพิ่มคำสั่งด้านบนลงใน ~ / .bashrc ของคุณ


1

ฉันรู้ว่านี่เก่ามาก แต่เนื่องจากไม่มีใครแนะนำให้สร้างนามแฝงฉันคิดว่าฉันโพสต์ ใช้Bash Prompt Escape Sequencesฉันทำนามแฝงshorten

ใน~/.bash_aliasesที่นี่คุณจะสังเกตเห็น var $ ฟ้าจะกำหนดสีพรอมต์ที่คุณสามารถละเว้นหรือการเปลี่ยนแปลงขึ้นอยู่กับการตั้งค่าของฉันยังล้างขั้วเมื่อเรียกสั้นลง

alias c='clear'

alias shorten='PS1="$Blue$USER:\W$ "&& c'

เพื่อให้บรรลุสตริงพรอมต์ที่ต้องการของ OP:

alias shorten='PS1="$USER:\W$ "'

ฉันได้สีที่กำหนดไว้ใน~/.bashrcการคัดลอกและวางจากhttps://wiki.archlinux.org/index.php/Color_Bash_Prompt ในด้านหมายเหตุสิ่งที่มีสีรหัส ansi? ฉันสับสนแค่มองมัน

Blue='\e[0;34m'         # Blue

คู่มือทีละขั้นตอนสำหรับสิ่งนี้จะมีประโยชน์อย่างมากเนื่องจากฉันไม่รู้ว่าจะไปยัง. bash_aliases ได้อย่างไร ขอบคุณ
Kayote

2
"" คำนำหน้าบ่งชี้ว่าไดเรกทอรีหรือไฟล์ที่ซ่อนอยู่ เครื่องหมายตัวหนอน "~" เป็นรูปแบบย่อของตัวแปร $ HOME ดังนั้น "~ / .bash_aliases" เป็นเพียงรูปแบบย่อของ "/home/$USER/.bash_aliases" หากต้องการเปิด ".bash_aliases" คุณสามารถเปิดเทอร์มินัลแล้วพิมพ์ "gedit /home/$USER/.bash_aliases" หรือ "gedit ~ / .bash_aliases" หรือในไดเรกทอรีโฮมของคุณพิมพ์ ctrl-h เพื่อแสดงไฟล์ที่ซ่อนอยู่และเปิดไฟล์โดยตรง . หวังว่าจะช่วย คุณอาจต้องการค้นหานามแฝงที่มีประโยชน์ด้วย Google
Allie Carver

0

ฉันเขียนฟังก์ชันที่คุณสามารถปรับเปลี่ยนให้เหมาะกับความต้องการของคุณ:

function termprompt() {
    PS1="${PS1//@\\h/}"     # Remove @host
    PS1="${PS1//\\w/\\W}"   # Change from full directory to last name
}

วางฟังก์ชั่นนี้ไว้ที่หรือใกล้กับด้านล่างสุดของบรรทัด~/.bashrcหลังจากPS1คำนวณเสร็จสมบูรณ์

คุณจะพิมพ์termpromptทุกครั้งที่คุณต้องการพรอมต์ให้สั้นลงหรือtermpromptโทรจากด้านล่าง~/.bashrcเพื่อความคงทน

ข้อได้เปรียบของเทคนิคนี้กับคำตอบอื่น ๆ อีกมากมายคือ.bashrcสามารถตั้งค่าได้PS1สี่วิธี (xterm + no-color, xterm + color, no-xterm + no-color, no-xterm + color) คำตอบนี้รองรับวิธีปัจจุบันทั้งสี่วิธีและวิธีการในอนาคตด้วย

ข้อดีอีกอย่างคือวิธีนี้มีรหัสควบคุมที่ซับซ้อนน้อยกว่าในการเข้าไปสำรวจเพื่อแทรกการเปลี่ยนแปลงของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.