การเปลี่ยนพฤติกรรมของ bash prompt เมื่อทำหน้าที่เป็น root


16

ก่อนที่คุณจะคลิกไปนี่ไม่ใช่คำถามทั่วไป "ฉันจะทำให้ bash prompt มีสีได้อย่างไร" ฉันได้กำหนด bash prompt ของฉันให้เป็นแบบนี้แล้ว:

[user @ host]----[$(pwd)]
$ 

ที่ทุกอย่างในวงเล็บเป็นสีฟ้าอ่อนและทุกอย่างอื่น (รวมถึง $) เป็นสีดำโดยเพิ่มสิ่งต่อไปนี้ในไฟล์ ~ / .bashrc ของฉัน

# Turn the prompt symbol red if the user is root
if [ $(id -u) -eq 0 ];
then # you are root, make the prompt red
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n\e[01;31m#\e[00m "
else
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n$ "
fi

เป้าหมายคือการทำให้มันเป็นอย่างนั้นสิ่งเดียวที่เปลี่ยนแปลงเมื่อฉันใช้ 'sudo su' คือการที่ $ ดำเปลี่ยนเป็น # สีแดง ฉันดูใน /etc/bash.bashrc และ / etc / profile เพื่อดูว่ามีเพียงบรรทัดที่จะแสดงความคิดเห็น แต่มีหลายสิ่งเกี่ยวกับ debian_chroot ที่ฉันไม่เข้าใจและฉันไม่ต้องการ เพื่อขันสกรู ฉันจะทำสิ่งที่ฉันต้องการให้สำเร็จได้อย่างไร

PS นี่คือสิ่งที่ฉันต้องการให้พรอมต์ให้ดูเหมือนราก

[user @ host]----[$(pwd)]
(red)#

แก้ไข: ทำเครื่องหมายสิ่งนี้ที่แก้ไขแล้วผนวกรหัสข้างบนกับ ~ / .bashrc ในขณะที่รูตบรรลุเป้าหมายของฉัน นอกจากนี้ในรหัสข้างต้น $ (pwd) จะแสดงเฉพาะโฮมไดเร็กตอรี่ (ฉันเดาเพราะนั่นคือไดเร็กตอรี่ที่ใช้งานได้เมื่อเปิดเทอร์มินัล), และไม่อัพเดทเลย การแทนที่ $ (pwd) ด้วย \ w จะแก้ไขสิ่งนี้ แต่จะแสดงโฮมไดเร็กตอ~รี่ซึ่งฉันพยายามหลีกเลี่ยง


คุณใช้ $ pwd หรือ $ PWD หรือไม่
belacqua

มันจะล้มเหลวในการตัดบรรทัดอย่างถูกต้องเนื่องจากคุณไม่ได้บอก bash ว่าคุณใช้อักขระที่ไม่สามารถพิมพ์ได้ ใส่ตัวอักษรที่ไม่สามารถพิมพ์เช่นใน\e[01;31m \[...\]นี่คือคำอธิบายภายใต้พรอมต์ในคู่มือ ดูmywiki.wooledge.org/BashFAQ/053 ด้วย
geirha

เหตุผลที่ทำไมpwdไม่ทำงานในพรอมต์คือคุณต้องหนีเครื่องหมายดอลลาร์มิฉะนั้น$(pwd)จะถูกดำเนินการก่อนที่เนื้อหาจะถูกวางใน $ PS1 PS1="\$(pwd) "คุณสามารถทดสอบได้ด้วยนี้
F-3000

คำตอบ:


12

นอกจากนี้ยังจะขึ้นอยู่กับว่าคุณจะเป็นผู้ใช้รูทอย่างไร คุณต้องทำการเปลี่ยนแปลงใน. bashrc ของผู้ใช้รูทหากคุณใช้บางอย่างเช่นsu - rootหรือsudo -iที่คุณอ่านในสภาพแวดล้อม

ด้วยsudo -sคุณควรจะอ่าน. bashrc ของคุณเอง

ลองเพิ่มคำสั่ง printf หรือ echo เพื่อดีบักรหัสของคุณเพื่อบอกคุณเมื่อมีการดำเนินการ

ใช้idคำสั่งเพื่อให้แน่ใจว่าคุณคือคนที่คุณคิดว่าคุณเป็น:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)

ฉันใช้sudo su
zmitchell

1
sudo suอ่าน ~ root / .bashrc (อย่างน้อยก็ใช้ในระบบ 13.04 ของฉันในปัจจุบัน)
belacqua

3

หากต้องการเปลี่ยนสีของพรอมต์เป็นสีแดงสำหรับรูทฉันแก้ไข.bashrcไฟล์ตามตัวอย่างในชุดข้อความนี้

regularuser@myubuntubox:~$ sudo su - 
root@myubuntubox:~# vim .bashrc

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

# Set RED prompt
PS1="\[\e[01;31m\]$PS1\[\e[00m\]"

2

ทำตามคำตอบที่ถูกต้องของ belacqua /ubuntu//a/305053/12218โดยการออก sudo su จะทำการโหลด. bashrc ของรูท

คุณสามารถตรวจสอบได้โดยการออกsudo suตามมาcd ~คุณจะเห็นว่าคุณอยู่ที่โฮมไดเร็กตอรี่ของรูท.

การใช้sudo suคุณเข้าสู่ระบบในฐานะ root (su = switch user) ในทางตรงกันข้ามกับ
sudo do some administrative taskผู้ใช้ที่มีสิทธิ์ยกระดับ

ดังนั้นโดยใช้sudo suคุณจะกลายเป็นรากที่เกิดขึ้นจริงและการเปลี่ยนแปลงที่เกิดขึ้นกับสภาพแวดล้อมที่มีการเปลี่ยนแปลงที่ทำมาโดยเฉพาะเพื่อรากเช่น: ตามมาด้วยsudo suvim .bashrc


0

การติดตามอาจช่วยได้

export PS1='`[ $(id -u) == "0" ] && echo "#" || echo ">"` '

สิ่งนี้จะแสดง'> 'สำหรับผู้ใช้ปกติและ'# 'สำหรับรูท สิ่งนี้ยังต้องอยู่ในรูท.bashrcด้วย


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