ทำไม root ไม่มา. bash_profile


10

ทุกครั้งที่ฉันพยายามเข้าสู่ระบบในฐานะรูทโดยใช้su(ไม่ใช่su -) จะไม่ได้มา.bash_profileจากไดเรกทอรีหลักของ user1

โดยทั่วไปฉัน/var/rootไดเรกทอรีไม่ได้.bash_profileดังนั้นผมจึงนำสำเนา.bash_profileในการทดสอบ/var/rootsu -

มันไม่ได้มาโดยอัตโนมัติ.bash_profile(ในvar/root) อย่างใดอย่างหนึ่ง

อย่างไรก็ตามผมต้องการที่จะทำให้.bash_profileของ user1 suที่มาในบัญชีของรากโดยอัตโนมัติเมื่อฉันใช้

ฉันควรทำอย่างไรดี?

(มันทำงานมาก่อน! วันหนึ่งมันไม่ได้มาเลย! อาจมีบางอย่างเปลี่ยนการตั้งค่าเป็น bash มันทำงานเมื่อฉันเข้าsource .bash_profileสู่ระบบหลังจากเข้าสู่ระบบ)

ฉันใช้ Mac และ OS X Yosemite

คำตอบ:


11

เปลือกเริ่มต้นสำหรับrootใน OS X /bin/shคือ มันshยังเป็นรุ่นของbashแต่เมื่อเรียกด้วยชื่อshBash :

พยายามเลียนแบบพฤติกรรมการเริ่มต้นของเวอร์ชันในอดีตshที่ใกล้เคียงที่สุดเท่าที่จะเป็นไปได้ในขณะที่สอดคล้องกับมาตรฐาน POSIX เช่นกัน

เมื่อเรียกใช้เป็นเชลล์ล็อกอินแบบโต้ตอบหรือเป็นเชลล์ที่ไม่มีการโต้ตอบพร้อมกับ--loginตัวเลือกอันดับแรกมันจะพยายามอ่านและดำเนินการคำสั่งจาก/etc/profileและ~/.profileตามลำดับนั้น ... เชลล์ที่เรียกใช้เนื่องจาก sh ไม่พยายามอ่านและดำเนินการคำสั่งจากไฟล์เริ่มต้นอื่น ๆ

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


นอกจากนี้คุณยังสามารถใช้dsclในการเปลี่ยนเปลือกราก (สังเกตว่า/etc/passwdจะไม่ได้ใช้ในการกำหนดเปลือกบน OS X) ที่ คุณสามารถตรวจสอบรากเปลือกปัจจุบันมีdscl . -read /Users/root UserShell; ศึกษาเอกสารและคิดอย่างรอบคอบก่อนที่จะเปลี่ยนเป็นอย่างอื่น

อีกวิธีหนึ่งก็คือเปลี่ยนการsuร้องขอของคุณเพื่อบังคับให้ดำเนินการbashทันที

ด้วยสิ่งที่คุณพูดฉันอาจแนะนำ symlink แต่คุณอาจต้องการตรวจสอบการเปลี่ยนแปลงที่โหมด POSIXของ Bash สร้างและตัดสินใจว่าคุณต้องการมีหรือไม่


5

เพราะมันไม่ถือเป็น "เปลือกหอยเข้าสู่ระบบ" (ซึ่งถูกเรียกโดยตรงจากloginหรือsshd) แต่ง่าย "เปลือกโต้ตอบ" ดูตัวอย่างได้ที่นี่: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

ดังนั้นบังคับsuใช้ตัวเลือกการเข้าสู่ระบบเช่นกับ-lตัวเลือก:

su -l

หรือทำให้สภาพแวดล้อมของคุณเป็น.bashrcไฟล์


5

ผู้ใช้รูทจะพยายามเรียกใช้ไฟล์. bashrc แทน. bash_profile เนื่องจากคุณไม่ได้เรียกใช้เชลล์ล็อกอิน

จากคู่มือทุบตีman bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

บันทึก~ตำแหน่งที่ไฟล์. bashrc จำเป็นต้องอยู่ในโฮมไดเร็กทอรีของผู้ใช้รูท

หากต้องการตอบคำถามของคุณหากคุณต้องการให้ไฟล์. bashrc ของ user1 ใช้ฉันขอแนะนำให้คุณสร้างลิงก์ (สัญลักษณ์) ระหว่างซอร์ส. bashrc จาก user1 ไปยังผู้ใช้รูท

คุณยังสามารถพิจารณาถึงแหล่งที่มาของ user1 .bashrc หรือ. bash_profile ด้วยการเพิ่มบรรทัด. /homedirectory/of/user1/.bash_profileลงในไฟล์. bashrc ของผู้ใช้รูท

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