จะแสดงพา ธ ปัจจุบันใน command prompt ใน linux's sh (ไม่ใช่ bash) ได้อย่างไร?


43

ฉันต้องการแสดงเส้นทางปัจจุบันใน sh prompt (ไม่ใช่ bash shell) ซึ่งปัจจุบันแสดงเพียง "#" ฉันพยายามแนะนำสิ่งนี้

env PS1="$(whoami)@$(hostname):$(pwd)"

และ

set PS1="$(whoami)@$(hostname):$(pwd)"

ใน/etc/profile.

แต่เห็นได้ชัดว่าไม่ได้รีเฟรชเมื่อไดเรกทอรีมีการเปลี่ยนแปลงหรือการเปลี่ยนแปลงผู้ใช้ โปรดแนะนำวิธีสร้างไดนามิกนี้


1
โปรดทราบว่าแต่ละ$()โปรแกรมจะทำงานแยกกัน มันจะเร็วกว่าการใช้ตัวแปรสภาพแวดล้อมเช่น$LOGNAME, $HOSTNAMEและ$PWDแทน
grawity

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

สิ่งที่คุณต้องทำก็คือใช้การส่งออก "PS1 =" $ (whoami) @ $ (ชื่อโฮสต์): $ (pwd)> "จากนั้นแก้ไข / etc / profile และต่อท้ายบรรทัดนี้ในตอนท้าย
SDsolar

คำตอบ:


76

การทดแทนคำสั่งด้วยเครื่องหมายคำพูดคู่"จะได้รับการขยายทันที นั่นไม่ใช่สิ่งที่คุณต้องการสำหรับพรอมต์ของคุณ เครื่องหมายคำพูดเดี่ยว'จะคงการทดแทนไว้$PS1ซึ่งจะได้รับการขยายเมื่อแสดงพรอมต์เท่านั้น ดังนั้นสิ่งนี้ควรใช้งานได้:

export PS1='$(whoami)@$(hostname):$(pwd)'

หากคุณต้องการเครื่องหมายดอลลาร์ปกติและช่องว่างท้ายข้อความแจ้งเตือนของคุณให้เพิ่ม$ที่ส่วนท้าย (โดยไม่จำเป็นต้องหลบหนี):export PS1='$(whoami)@$(hostname):$(pwd)$ '


1
ทำงานเหมือนเสน่ห์หลังจากเปลี่ยน 'ชุด' ถึง 'ส่งออก' ในคำตอบของคุณ ฉันบันทึกการเปลี่ยนแปลงที่จะexport PS1='$(whoami)@$(hostname):$(pwd)$' /etc/profileขอขอบคุณ.
Bleamer

@Bleamer: setทำงานให้ฉัน (แต่ฉันไม่มีคนพื้นเมืองsh) แต่ฉันจะเปลี่ยนเป็นเพื่อexportให้สอดคล้องกับการตั้งค่าของคุณ
mpy

2
มีวิธีใดที่จะทำให้สิ่งนี้ถาวร ขณะนี้ฉันต้องทำทุกครั้งที่ลงชื่อเข้าใช้ขอบคุณ!
the.ufon

3
คุณใส่บรรทัดนี้/etc/profile(ดูคำถาม) หรือ~/.profile?!
mpy

+1 สิ่งนี้จะต้องมีตัวคั่นบางตัวในตอนท้าย ในฐานะที่เป็นคุณจะได้รับสิ่งที่ต้องการเมื่อใช้foo@localhost:/home/fools -la ls -la
phresnel

12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>

1
ฉันกลัวว่าใช้ได้กับ bash shell ไม่ได้สำหรับ sh เมื่อฉันทำสิ่งนี้ฉันจะได้\u@\h:\w>รับคำสั่งจากฉัน
Bleamer

1
ต้องเป็นเวอร์ชัน sh อื่น อย่างที่คุณเห็นจากบรรทัดแรกมันใช้ได้กับฉันใน sh 4.2
เจนนี่ D

1
อาจเป็นเช่นนั้น เชลล์นี้มาจาก Busy Box ขอขอบคุณ. ขอบคุณสำหรับความช่วยเหลือของคุณ
Bleamer

@Bleamer BusyBox v1.19.4 built-in shell (ash)ก็ทำงานให้ฉันด้วย
cjm

ขอบคุณสำหรับการตอบสนอง @cjm แม้ว่าฉันจะหลีกเลี่ยงการขุดเพิ่มเติมในเรื่องนี้
Bleamer

5

คำสั่งนี้ใช้ได้สำหรับฉัน

export PS1="\u@\h: \W:$"

โดยที่
\ u = ชื่อผู้ใช้
\ h = ชื่อโฮสต์
\ W ชื่อของโฟลเดอร์ปัจจุบัน (ไม่ใช่เส้นทางแบบเต็ม)


+1 สำหรับพารามิเตอร์ \ W
Dimitry K

3

หนึ่งอาจพิจารณาแมงดาพรอมต์โดยการเพิ่มบางสี ตัวอย่างเช่น

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '

1
นี่คือสิ่งที่ฉันกำลังมองหา ฉันหวังว่าทุกคนจะชอบสีสันในชีวิต :)
Govind Kailas

อย่างน้อยฉันก็ทำ ;)
Arvid

1

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

set PS1="$(pwd)" 

ตั้งค่าพรอมต์ให้กับไดเร็กทอรีการทำงานเป็นของคำสั่ง set

set PS1="\$(pwd)" 

ไม่ขยาย $ (pwd) แต่จะตั้งค่า PS1 เป็นค่าตามตัวอักษรของ $ (pwd)

ทดสอบ / ทำความเข้าใจสิ่งนี้โดยการเรียกใช้:

echo $PS1

. หากคุณเห็นสตริง: $ pwd ข้อความแจ้งของคุณจะใช้งานได้ หากคุณเห็นเส้นทางตัวอักษรพรอมต์จะถูกทำลายเนื่องจากถูกตั้งค่าแบบคงที่


1

ใช้คำสั่งด้านล่างเพื่อตั้งเป็นเหมือนใน cpanel

ส่งออก PS1='$(whoami)@${HOSTNAME%%.*} [$ (pwd)] # '


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