ทำไมระบบพรอมต์ Linux ของฉันแสดง $ แทนชื่อล็อกอินและพา ธ


13

ในเซิร์ฟเวอร์ของฉันพรอมต์คือ [user @ host path] ... และฉันสามารถกด "แท็บ" เพื่อเติมเส้นทางโดยอัตโนมัติได้

แต่สำหรับเซิร์ฟเวอร์ Ubuntu ตัวใหม่ของฉันมันเป็นเพียงสัญลักษณ์ดอลลาร์?


1
คุณสามารถพิมพ์pwdเพื่อพิมพ์ชื่อของไดเรกทอรีทำงานปัจจุบัน และคุณกำลังพูดว่า Tab-เสร็จสิ้นไม่ทำงานเช่นกัน? (ในบางเครื่องที่ฉันใช้ฉันจะได้รับพรอมต์สั้น ๆ ก็ต่อเมื่อฉันเข้าสู่ระบบในฐานะ root และฉันก็ปล่อยให้มันเป็นคำเตือนที่ดีอย่างมีความสุขเช่นเดียวกับที่ไม่ค่อยจะมีการเข้าสู่ระบบในฐานะ root: คุณเป็นอย่างไรบ้าง)
Arjan

อเล็กซ์บอกคุณได้ไหมว่าคุณใช้ distro อะไร
กลับ

ฉันใช้ Ubuntu
Alex

Ubuntu ล่าสุดหรือไม่ และคุณกำลังพูดว่า Tab-เสร็จสิ้นไม่ทำงานเช่นกัน?
Arjan

ดูเหมือนว่าคุณกำลังถามคำถามสองข้อ: ทำไมแท็บไม่ป้อนเส้นทางโดยอัตโนมัติและทำไมพรอมต์เพียงแค่ใช้เครื่องหมายดอลลาร์แทน [user @ host path] เป็นการยากที่จะลงคะแนนคำตอบเนื่องจากไม่มีคำตอบทั้งคู่
Joseph Holsten

คำตอบ:


27

เมื่อคุณถามคำถามสองข้อฉันจะตอบทั้งสองข้อ

ทำไมแท็บพา ธ ไฟล์เติมข้อความอัตโนมัติไม่สมบูรณ์

เพราะเปลือกคุณไม่สนับสนุนหรือไม่ได้เปิดใช้งานการเติมแท็บ

ในการแก้ไขปัญหานี้คุณต้องค้นพบว่าเชลล์ของคุณคืออะไร บนเครื่องที่คุณชอบใช้งาน

echo $SHELL

คุณอาจเห็นร่วมกัน/bin/bashหรือสิ่งที่น้อยเหมือนกันเช่น/bin/tcsh, /bin/zshหรือสิ่งอื่นทั้งหมด

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

 which bash

นี้จะให้เส้นทางของเปลือกที่คุณต้องการบางอย่างเช่น/bin/bash, หรือ/usr/bin/bash /usr/local/bin/bashแน่นอนถ้าคุณต้องการเปลือกอื่น ๆ กว่าทุบตีคุณจะพูดwhich tcsh, which zshหรือที่คล้ายกัน

หากคุณไม่เห็นเส้นทาง แต่เห็นแทนคุณbash not foundจะต้องติดตั้งแพ็คเกจที่เหมาะสมและใช้อีกครั้งwhichเพื่อค้นหาตำแหน่งที่ติดตั้งเชลล์

ด้วยเส้นทางของเชลล์ที่คุณเลือกคุณสามารถเปลี่ยนเชลล์ได้ในที่สุดโดยการรัน

chsh -s /bin/bash

แทนที่/bin/bashด้วยเส้นทางที่เหมาะสมสำหรับเชลล์ที่คุณเลือก

เหตุใดเครื่องหมายแจ้งเตือนดอลลาร์แทน [user @ host path]

เพราะตัวแปรสภาพแวดล้อมที่รวดเร็วของคุณ$PS1, $PS2และอื่น ๆ สิ่งเหล่านี้ไม่น่าจะพกพาได้ระหว่างเชลล์ดังนั้นนี่คือลิงค์สำหรับผู้สมัครที่มีแนวโน้ม:

bashมีคู่มือที่ครอบคลุมโดยมีหน้าต่างๆในตัวแปร Bash (รวมถึงPS1& & c) และการพิมพ์พรอมต์ (ซึ่งอธิบายPROMPT_COMMANDชื่อที่มีความยาวสำหรับPS1) เพิ่มบรรทัดต่อไปนี้ใน~/.bashrc

export PS1='[\u@\h \w] '

tcshมีคู่มือออนไลน์ (แค่หน้าคน) พร้อมกับส่วนที่เกี่ยวกับตัวแปรสภาพแวดล้อมที่พรอมต์ เพิ่มบรรทัดต่อไปนี้ใน~/.tcshrc

set prompt='[%n@%m %~] '

zshมีคู่มือผู้ใช้พร้อมคำแนะนำง่ายๆในการแจ้งเตือนรวมทั้งคู่มือโดยมีการอ้างอิงโดยละเอียดเกี่ยวกับการขยายพร้อมท์ เพิ่มบรรทัดต่อไปนี้ใน~/.zshrc

export PS1='[%n@%m %~] '

6

Bash ไม่ใช่เปลือกเท่านั้น

ปัญหาของคุณอาจเป็นเรื่องง่าย ๆ ที่ไม่มี. profile หรือ. bashrc ที่ตั้งค่า PS1 หรืออาจเป็นได้ว่าเชลล์ล็อกอินของคุณไม่ได้ถูกทุบตีเลย

Bash ใช้gnu readlineสำหรับสิ่งต่าง ๆ เช่นการเติมเต็มของแท็บ นี่เป็นเรื่องที่ซับซ้อนและ readline แม้จะมีไฟล์กำหนดค่าต่อผู้ใช้

ดูman bash, และman sh ตอบสนองการทุบตีman 3 readline --versionบนระบบลินุกซ์จำนวนมาก/bin/shไม่จริงทุบตี ashแต่มักจะเป็นรุ่นของคนพิการ


1
ไม่ได้dashแทนash? ฉันคิดว่าฉันอ่านบางอย่างเช่นนี้
knittl

2
+1 สำหรับการไม่มี. profile หรือ. bashrc - เว้นแต่ Alex จะเริ่มตั้งค่าบัญชีของเขาเมื่อเขาติดตั้ง Ubuntu จากนั้นตามค่าเริ่มต้นผู้ใช้ใหม่จะไม่มี. bashrc / ไม่มีชุด PS1
Cory Plastek

4

ฉันเดาว่าคุณไม่ได้ใช้ bash แต่ sh และการแจ้งเตือนของคุณไม่ได้ตั้งอย่างถูกต้อง (ถ้าเป็นไปได้ด้วย sh)

คุณสามารถรับเชลล์ปัจจุบันได้โดยพิมพ์: echo $SHELL

หากคุณต้องการเริ่มทุบตีเพียงพิมพ์ bash


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

ดีชื่อโปรแกรมของเชลล์คือ sh (ใน / bin / sh) และใช่ echo $ SHELL จะพิมพ์ตัวแปร SHELL ซึ่งโดยปกติจะถูกตั้งค่า
Knittl

ทุกระบบยูนิกซ์มีการปฏิบัติการที่เรียกว่า/bin/shใช่ shแต่ฉันรู้ว่าของเปลือกไม่มีชื่อซึ่งเป็น ฉันสามารถคิดash, ksh, csh, bash, และzsh tcshอันแรกคือ / bin / sh ปกติบน linux และ NetBSD, สุดท้ายคือเชลล์ FreeBSD ปกติ, และอื่น ๆ เป็น shell ตัวเลือก สภาพแวดล้อมเดสก์ท็อปจำนวนมากเปลี่ยนเชลล์ล็อกอินของผู้ใช้เป็นทุบตีในขณะที่ปล่อย / bin / sh ไว้เป็นเถ้า
DigitalRoss

2
@DigitalRoss shเป็นเชลล์เป้าหมาย en.wikipedia.org/wiki/Bourne_shellบางระบบ (Solaris) ยังคงมาพร้อมกับเวอร์ชันของ Bourne shell ที่ไม่ได้เป็นเพียงสำเนาของการนำกลับมาใช้ใหม่อย่างใดอย่างหนึ่ง (ash, dash, bash, ksh, zsh)
Chris Johnsen

... และ bash เป็นที่รู้จักในนาม "Bourne shell อีกครั้ง" ซึ่งสืบทอดคุณสมบัติบางอย่างจาก Bourne shell, csh และ ksh
กลับ

2

คุณต้องตั้งค่าตัวแปรที่เรียกว่า PS1 บนหนึ่งในสคริปต์การเข้าสู่ระบบของคุณตัวอย่างเช่น / etc / profile หรือ ~ / .bashrc มันจะขึ้นอยู่กับการกระจายของคุณ

ตัวอย่าง: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.htmlตัวอย่าง


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