วิธีหลีกเลี่ยงตัวหนอน ~ ใน Bash prompt?


12

ฉันต้องการลบเครื่องหมายตัวหนอนออกจากการแสดงภายในตัวแปร PS1

สตริง PS1 ปัจจุบันของฉัน:

PS1="\h:\w\n$"

และพรอมต์จะเป็นดังนี้:

lnx-hladky:/tmp/plugtmp
$

ฉันไม่ชอบที่ไดเรกทอรี $ HOME จะแสดงเป็นตัวหนอน สามารถหลีกเลี่ยงได้ไหม

มันทำให้เกิดปัญหาตัวอย่าง:

lnx-hladky:~/DOC
$  

เอกสารอธิบายว่า:

\w : the current working directory, with $HOME abbreviated with a tilde 
\W: the basename of the current working directory, with $HOME abbreviated with a tilde

มีความเป็นไปได้หรือไม่ที่จะหลีกเลี่ยงการจ่าย $ HOME ด้วยตัวย่อด้วยเครื่องหมายตัวหนอน?

ฉันพบทางเดียว แต่ฉันรู้สึกว่ามันซับซ้อนเกินไป:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

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


สิ่งที่ "ปัญหา" ตัวหนอนทำให้เกิดในตัวอย่าง?
JBallin

คำตอบ:


11

bash จะเรียกใช้ส่วนขยายในพร้อมท์ เพียงให้แน่ใจว่าจะหลบหนีพวกเขา

PS1='\h:$(pwd)\n$'

นั่นตอบคำถามของฉัน ฉันไม่รู้ว่ามีความเป็นไปได้เช่นนั้น ขอบคุณมาก Ignacio!
Jirka


1
โซลูชันของ Jirka ทำงานpwdทุกครั้งที่มีการแจ้ง วิธีการแก้ปัญหาของเดนนิสไม่เพียงแค่ดึงตัวแปรสภาพแวดล้อม PWD ซึ่งราคาถูกกว่ามาก
Stéphane Gourichon

2
pwdเป็นทุบตี builtin การยืนยันที่${PWD}"ถูกกว่า" มากกว่าที่$(pwd)ไม่มีหลักฐาน
Vineet

1
@anxieux: คุณต้องพูดด้วยอัญประกาศเดี่ยวไม่ใช่อัญประกาศคู่
weberjn

0

คุณไม่จำเป็นต้องเรียกใช้คำสั่งจำนวนมากตามที่แสดงในตัวอย่างของคุณ bashให้ทางลัดสำหรับสิ่งที่คุณพูดถึง

ตัวอย่างของคุณ:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

สามารถเขียนใหม่เป็น:

PS1='\e[4;35m\t\e[24m\u@\h:\w\e[m\n'

ที่\tแสดงเวลา (ในรูปแบบ 24 ชั่วโมง) \uแสดงชื่อผู้ใช้ปัจจุบัน '\ h' แสดงชื่อโฮสต์ - bashหน้าคนพูดถึงสิ่งเหล่านี้และส่วนที่เหลือของ escapes ที่พร้อมใช้งานสำหรับคุณ

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


สวัสดีความตั้งใจของฉันคือแทนที่ \ w ด้วยเส้นทางแบบเต็มรวมถึงเส้นทางแบบเต็ม $ HOME ขอบคุณ Ignacio ตอนนี้ฉันใช้ PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $' ซึ่งได้แก้ไขปัญหาของฉัน :-)
Jirka

สมบูรณ์แบบ - ฉันชอบ\uที่จะรู้ว่าฉันเป็นใคร อย่าลืมยอมรับคำตอบของ Ignacio - คลิกที่ช่องทำเครื่องหมายทางด้านซ้ายของคำถาม
Doug Harris

ขอบคุณสำหรับคำใบ้ ฉันใหม่กับฟอรัมนี้ มันเป็นสถานที่ที่ยอดเยี่ยม
Jirka

\ u @ \ h: $ PWD (หมายเหตุเครื่องหมายโคลอน) สามารถใช้เป็นอินพุตสำหรับ scp ได้
weberjn

0

ฉันกำลังใช้การตั้งค่าด้านล่างในไฟล์. bash_profile ของฉัน

$ export PS1='\e[1;34m\D{%T %d.%m.%Y} \[\033[00;39m\]\u\[\033[00;32m\]@$IP:\[\033[00;33m\]$(pwd)/\n\\$\[\033[00m\] '

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