ฉันจะย่อเส้นทางไดเรกทอรีปัจจุบันที่แสดงบนเทอร์มินัลได้อย่างไร


17

ถ้าฉันอยู่ในไดเรกทอรีลึกสมมติว่า:

~/Desktop/Dropbox/School/2017/C/A3/

เมื่อฉันเปิดสถานีมันก็บอกว่า

bob@bob-ubuntu:~/Desktop/Dropbox/School/2017/C/A3/$

จากนั้นฉันก็เขียนคำสั่งของฉัน นั่นยาวมากและทุกบรรทัดที่ฉันเขียนในเทอร์มินัลจะไปที่บรรทัดถัดไป ฉันต้องการทราบว่ามีวิธีการหรือไม่ที่จะแสดงเฉพาะไดเรกทอรีปัจจุบันของฉัน ฉันต้องการให้มันแสดง:

bob@bob-ubuntu: A3/$

วิธีนี้ชัดเจนมากและฉันสามารถpwdดูไดเรกทอรีทั้งหมดของฉันได้ตลอดเวลา ฉันไม่ต้องการให้ไดเรกทอรีทั้งหมดปรากฏในเทอร์มินัลเพราะใช้พื้นที่มากเกินไป

คำตอบ:


12

คุณต้องแก้ไขPS1ในไฟล์เริ่มต้นเชลล์ของคุณ (อาจ.bashrc)

หากมีอยู่แล้วการตั้งค่าจะมี\wซึ่งเป็นสิ่งที่ให้ไดเรกทอรีการทำงานของคุณ เปลี่ยนเป็น\W(ตัวพิมพ์ใหญ่) ออกจากระบบและเข้าใหม่อีกครั้งหรือทำ:

. .bashrc

(หรือไฟล์ของคุณ)

หากไม่มีให้เพิ่มสิ่งที่ต้องการ:

PS1='\u@\h: \W:\$'

เพื่อ.bashrcหรืออะไรก็ตาม ค้นหาPS1ในbashหน้าคู่มือเพื่อรับแนวคิดเพิ่มเติม

ระวัง; bashสามารถใช้ไฟล์เริ่มต้นได้มากกว่าหนึ่งไฟล์เช่น.bashrcและ.bash_profile; อาจเป็นได้ว่าPS1มีการตั้งค่าในทั้งระบบ แต่คุณสามารถลบล้างไฟล์นั้นในไฟล์ใดไฟล์หนึ่งของคุณเอง


23

ตั้งแต่ bash 4 วิธีที่ตรงไปตรงมาเพื่อลดความลึกของไดเรกทอรีในบรรทัดคำสั่งคือการใช้คำสั่งด้านล่างในไฟล์ bashrc ของคุณ เพียงอย่าลืมเปิดเทอร์มินัลของคุณอีกครั้งและหมายเลข (เช่น 1) จะระบุความลึกของไดเรกทอรีที่จะแสดง

PROMPT_DIRTRIM = 1


4
นี่คือสิ่งที่ฉันกำลังมองหา การตั้งค่าบางอย่างเช่นexport PROMPT_DIRTRIM=3ในของคุณ.bashrcเป็นพื้นกลางที่สมบูรณ์แบบระหว่างและ\W \wดูที่: gnu.org/software/bash/manual/html_node/Bash-Variables.html
spkane

3

สมมติว่าคุณกำลังใช้ทุบตีเปลี่ยนสตริงพรอมต์ (PS1 ตัวแปร) เพื่อให้มีแทน\W\w

เช่นหากปัจจุบัน PS1 ของคุณ\u@\h:\w\$ตั้งเป็น\u@\h:\W\$

นี้เพื่อให้ถาวรคุณจะมีการเปลี่ยนแปลงในไฟล์เริ่มต้นทุบตีคุณ - เช่นหรือ~/.bash_profile~/.bashrc

ดูman bashและค้นหาPROMPTINGรายละเอียดทั้งหมดและรายการอักขระพิเศษที่ใช้เครื่องหมายแบคสแลช


ฉันมี 4 กล่าวถึง PS1 ฉันเปลี่ยนทั้ง 4 ได้ไหม
K Split X

4 กล่าวถึงที่ไหน ใน ~ / .bash_profile มันควรจะไม่ทำอันตรายที่จะเปลี่ยนทุกกรณี\wใน PS1 \Wไป หรือคุณสามารถตั้งค่าให้สิ่งที่คุณชอบที่ด้านล่างของสคริปต์
cas

1

ในกรณีนี้คุณจะต้องแก้ไขPS1 ,

ติดตั้ง\wแล้วคุณจะมีคำสั่งหรือตัวแปรที่แสดงเส้นทางลัด:

PS1 ดั้งเดิม

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$'

เปลี่ยนเป็น

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]${PWD##*/}\[\033[00m\]\$'

โปรดทราบว่าสิ่งนี้จะทำให้ชื่อผู้ใช้ของ ~ ถ้าคุณอยู่ในบ้าน dir!

เพื่อหลีกเลี่ยงการที่คุณจะต้องใช้คำสั่งบางคำสั่งเช่น $ {PWD ## * /} เช่น

if [[ "${PWD}" == "${HOME}" ]] ; then printf \~; else echo -n ${PWD##*/}; fi

PS1 ใหม่จะมีลักษณะดังต่อไปนี้

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]`if [[ "${PWD}" == "${HOME}" ]] ; then printf \~; else echo -n ${PWD##*/}; fi`\[\033[00m\]\$'

oOps ในขณะที่ฉันพยายามที่จะช่วยโลกที่ฉันมี noIdea | ลืม\ W


1

นี่เป็นแบบพกพาสำหรับshกระสุนทั้งหมด

กำหนดให้กับPS1หนึ่งในไฟล์เริ่มต้นเชลล์ของคุณ:

PS1='${PWD##*/} $ '

ข้อความแจ้งจะมีลักษณะดังนี้

dir $

dirชื่อฐานของไดเรกทอรีปัจจุบันอยู่ที่ไหน

$PWDตัวแปรประกอบด้วยเส้นทางไดเรกทอรีปัจจุบันและ${PWD##*/}จะตัดทุกอย่างและรวมถึงล่าสุด/ในเส้นทางที่

เครื่องหมายคำพูดเดี่ยวป้องกันรูปแบบเชลล์ที่ประเมินการทดแทนตัวแปรในเวลาที่ได้รับมอบหมาย (ค่าของ$PS1จะได้รับการประเมินทุกครั้งที่มีการแจ้งเตือน)

PS1ตัวแปรไม่ควรส่งออกที่มีการใช้โดยเปลือกปัจจุบันเท่านั้น


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