ชื่อแทนทุบตีควรไปใน.bash_aliases
หรือ.bashrc
ไฟล์ในไดเรกทอรีบ้านแต่ละรายการ หากคุณต้องสร้างนามแฝงทุบตีทั่วโลกพวกเขาสามารถเข้าไปได้/etc/bash.bashrc
แต่มักจะเป็นการง่ายที่สุดที่จะเพิ่มพวกเขาลงในไฟล์.bash_aliases
หรือเพื่อที่พวกเขาจะได้รับมรดกโดยผู้ใช้ที่สร้างขึ้นใหม่.bashrc
/etc/skel
มันเป็นความจริงที่ไม่ถูกต้องเสมอเพื่อกำหนดนามแฝงในใน.profile
, หรือ.bash_profile
/etc/profile
จะเข้าใจว่าทำไมหนึ่งต้องเข้าใจสิ่งที่อยู่ภายใต้คำสั่งสถานการณ์จากแต่ละไฟล์เหล่านี้จะถูกเรียกใช้ มีความเข้าใจผิดเกี่ยวกับสิ่งนี้ซึ่งฉันได้กล่าวไว้ด้านล่าง
แม้ว่าคุณต้องการกำหนดนามแฝงสำหรับผู้ใช้หลายคนคุณควรทำความคุ้นเคยกับวิธีการกำหนดนามแฝงสำหรับผู้ใช้แต่ละคนเพื่อให้คุณสามารถตัดสินใจได้ว่าวิธีที่ดีที่สุดในการทำสิ่งที่คุณต้องการคืออะไร
นามแฝงสำหรับผู้ใช้ส่วนบุคคล
โดยเฉพาะอย่างยิ่งถ้าคุณใช้ GUI ส่วนใหญ่ของเปลือกหอยโต้ตอบของคุณอาจจะไม่ใช่การเข้าสู่ระบบเปลือกหอย แม้ว่าคุณจะไม่เคยใช้ GUI คุณอาจยังคงใช้เชลล์ที่ไม่ใช่การเข้าสู่ระบบด้วยความถี่บางอย่าง คุณจะต้องการให้นามแฝงของคุณทำงานในเปลือกเหล่านี้
โดยเฉพาะอย่างยิ่งถ้าคุณเคยล็อกอินแบบไม่ใช้กราฟิกในคอนโซลเสมือนหรือผ่าน SSHคุณอาจใช้ล็อกอินเชลล์ในบางครั้ง ดังนั้นคุณจะต้องการให้นามแฝงของคุณทำงานในเชลล์ล็อกอินแบบโต้ตอบด้วย
เมื่อเชลล์แบบโต้ตอบและไม่ใช่การล็อกอินเริ่มต้นมันจะเริ่มต้น.bashrc
ในโฮมไดเรกทอรีของผู้ใช้ ตามค่าเริ่มต้นใน Ubuntu .bashrc
แหล่งตัวเองของผู้ใช้แต่ละคน.bash_aliases
หากมีอยู่
- ต้องการแหล่งไฟล์ที่จะก่อให้เกิดเนื้อหาที่จะทำงานในปัจจุบันเปลือก การเปลี่ยนแปลงสภาพแวดล้อมของเชลล์ที่ทำในไฟล์ที่มีอยู่ยังคงอยู่แม้หลังจากรันคำสั่งทั้งหมดในไฟล์แล้ว
อ่านความคิดเห็นในการเริ่มต้นอูบุนตูที่.bashrc
เผยให้เห็นว่ามันตั้งใจอย่างเป็นทางการว่านามแฝงไปหรือ.bashrc
มีคำจำกัดความของนามแฝงอยู่แล้ว (เรียกใช้เพื่อดู) และให้คำแนะนำอย่างชัดเจนเกี่ยวกับตำแหน่งที่จะวางคำจำกัดความใหม่ดังกล่าว.bash_aliases
.bashrc
grep '^[[:blank:]]*alias' ~/.bashrc
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
แต่แล้วเชลล์ล็อกอินแบบโต้ตอบล่ะ แทนที่จะแหล่งหอยเข้าสู่ระบบ.bashrc
.profile
- ... ถ้า
.bash_login
ไม่มีแล้วมันก็จะกลายเป็นแหล่งที่มาแทน
- ... ถ้า
.bash_profile
ไม่มีแล้วมันก็จะกลายเป็นแหล่งที่มาแทน
แต่ข่าวดีก็คือว่าโดยปกติในอูบุนตูคำสั่งใน.bashrc
จะยังทำงานในเปลือกหอยเข้าสู่ระบบแบบโต้ตอบเพราะเริ่มต้น.profile
การตรวจสอบถ้าเปลือกปัจจุบันเป็นทุบตี (และถ้า.bashrc
มี) และถ้าเป็นเช่นแหล่งที่มา.bashrc
:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
ฉันขอแนะนำให้ผู้ใช้กำหนดนามแฝงทุบตีใหม่ใน.bash_aliases
ไดเรกทอรีบ้านของพวกเขา นี่เป็นวิธีที่ง่ายและสะอาดเป็นพิเศษในการสร้างคำจำกัดความของชื่อแทนถาวรในระดับต่อผู้ใช้
ไม่ควรกำหนดนามแฝง.profile
เนื่องจากจะยังไม่ได้กำหนดในเปลือกที่ไม่ใช่การเข้าสู่ระบบ ไม่เหมือนกับสภาพแวดล้อมของ bash shell ส่วนใหญ่ aliases จะไม่ถูกส่งออกไปยัง child shells:
ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found
โดยเฉพาะอย่างยิ่งโดยค่าเริ่มต้นสภาพแวดล้อมเดสก์ทอปส่วนใหญ่ทำให้.profile
มีที่มาจากการเข้าสู่ระบบกราฟิก แต่:
- สิ่งนี้ไม่จำเป็นต้องทำโดย bash shell ดังนั้นนิยาม alias อาจไม่ถูกประมวลผลและที่สำคัญกว่านั้น
- แม้ว่าคำจำกัดความนามแฝงมีการประมวลผลที่พวกเขาไม่ได้รับการส่งต่อไปยังกระบวนการที่เด็ก โดยเฉพาะอย่างยิ่งพวกมันจะไม่ถูกส่งไปยังเชลล์ที่สร้างโดยการเปิดหน้าต่างเทอร์มินัล!
ไม่ควรกำหนดนามแฝงใน.bash_profile
(หรือ.bash_login
)ด้วยเหตุผลเดียวกัน แต่ด้วยเหตุผลอื่น สร้างไฟล์เหล่านี้อย่างไร้เดียงสาและวางคำจำกัดความเพียงนามแฝงไว้ในไฟล์เพื่อป้องกันไม่ให้โค้ดใด ๆ.profile
ทำงาน!
ในสถานการณ์ที่.bash_profile
หรือ.bash_login
มีประโยชน์จริง ๆ โดยทั่วไปมักจะมีแหล่งข้อมูลหนึ่ง.profile
อยู่ที่ใดที่หนึ่งซึ่งสามารถแก้ไขปัญหานั้นได้ (จากนั้นปัญหาเดียวที่เหลืออยู่ก็คือ.profile
การกำหนดนามแฝงใน.bash_profile
หรือ.bash_login
ไม่ทำงาน)
นามแฝงสำหรับผู้ใช้รายใหม่โดยอัตโนมัติ
เมื่อบัญชีผู้ใช้ประเภทที่ต้องการแสดงถึงความเป็นมนุษย์ที่แท้จริงถูกสร้างขึ้นโดยทั่วไปแล้วไดเรกทอรีใหม่จะถูกสร้างขึ้นเพื่อใช้เป็นโฮมไดเรกทอรีของพวกเขา เนื้อหาของ/etc/skel
จะถูกคัดลอกไปยังไดเรกทอรีบ้านของพวกเขา นี่คือวิธีที่ผู้ใช้หลายคนเริ่มด้วยไฟล์กำหนดค่าที่คล้ายกันในโฮมไดเร็กตอรี่ ใน Ubuntu นี้รวมถึง.profile
, .bashrc
และไฟล์อื่น ๆ บางส่วน
การเปลี่ยนแปลงสิ่งที่มีการกำหนดชื่อแทนสำหรับผู้ใช้ใหม่คุณก็สามารถใส่ไว้ใน/etc/skel/.bash_aliases
(คุณจะต้องสร้างมันขึ้นมา) /etc/skel/.bashrc
หรือ
หากคุณแก้ไขไฟล์ที่มีอยู่แล้วใน/etc/skel
คุณอาจต้องการสำรองข้อมูลก่อน - แต่คุณไม่ควรทำการสำรองข้อมูล/etc/skel
หรือไม่เช่นนั้นจะถูกคัดลอกไปยังโฮมไดเร็กตอรี่ของผู้ใช้ใหม่
นี่เป็นวิธีที่ดีที่สุดสำหรับคุณในการเพิ่มชื่อแทนใหม่สำหรับผู้ใช้หลายคน ผู้ใช้ที่มีอยู่สามารถเพิ่มชื่อแทนได้เอง หากคุณกำหนดนามแฝงใน/etc/skel/.bash_aliases
คุณสามารถนำพวกเขาไปยังไฟล์ที่พวกเขาอาจเลือกที่จะคัดลอกลงในไดเรกทอรีบ้านของพวกเขา (หรือเพิ่มลงใน.bash_aliases
ไฟล์ที่กำหนดเองของพวกเขา)
เป็นเรื่องเล็กน้อยสำหรับผู้ใช้ที่จะยกเลิกการกำหนดชื่อแทน นอกจากนี้ชื่อแทนไม่ได้แข็งแกร่งมาก ; พวกเขาทำงานได้เฉพาะในบางสถานการณ์ หากคุณต้องการสร้างคำสั่งใหม่ที่ใช้งานได้ตลอดเวลาสำหรับทุกคนคุณไม่ควรใช้คำสั่งนั้นเป็นนามแฝง และคุณไม่สามารถประสบความสำเร็จในการบังคับนามแฝงกับผู้ใช้ที่ไม่ต้องการให้พวกเขา - พวกเขาก็สามารถunalias
ให้พวกเขา
นามแฝงส่วนกลางสำหรับผู้ใช้ทั้งหมด
แม้ว่าฉันจะแนะนำให้คุณหลีกเลี่ยงวิธีการนี้ แต่คุณสามารถกำหนดชื่อแทนในไฟล์โกลบอล /etc/bash.bashrc
ได้ จากนั้นจะถูกกำหนดทั้งสำหรับเชลล์ที่ไม่ใช่การเข้าสู่ระบบแบบโต้ตอบและสำหรับเชลล์ล็อกอินแบบโต้ตอบ เหตุผลคือก่อนที่ไฟล์ใด ๆ ในโฮมไดเร็กทอรีของผู้ใช้จะเป็นแหล่งที่มา:
- ล็อกอินเชลล์ (และเฉพาะเชลล์ล็อกอินและกระบวนการอื่นที่ทำหน้าที่เหมือนเชลล์ล็อกอิน) เรียกใช้คำสั่งจาก
/etc/profile
อัตโนมัติ
- เชลล์ที่ไม่ใช่การล็อกอินเท่านั้นที่รันคำสั่ง
/etc/bash.bashrc
โดยอัตโนมัติแต่
- ค่าเริ่มต้นของอูบุนตู
/etc/profile
จะตรวจสอบว่าเชลล์ที่รันอยู่นั้นทุบตี (และถ้า/etc/bash.bashrc
มี) และแหล่งที่มา/etc/bash.bashrc
หรือไม่
สิ่งนี้คล้ายคลึงกับวิธีการเริ่มต้นต่อ.profile
แหล่งที่มาของผู้ใช้ต่อผู้ใช้.bashrc
ถ้าเชลล์นั้นทุบตี (ตามรายละเอียดด้านบน)
นี่คือลักษณะที่แท้จริงของรหัสนี้ในค่าเริ่มต้น/etc/profile
:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
บล็อกนั้นยังทำงานอื่น ๆ โดยเฉพาะการif
ตรวจสอบภายนอกว่าเชลล์น่าจะเป็นแบบอินเตอร์แอคทีฟ (โดยตรวจสอบว่าข้อความพรอมต์ไม่ว่างเปล่า) จากนั้นตรวจสอบว่าเชลล์ปัจจุบันนั้นมีการตีและแหล่งที่มา/etc/bash.bashrc
หากเป็นและถ้าไม่ทำงาน เสร็จแล้ว/etc/bash.bashrc
ค่ะ
คุณไม่ควรกำหนดนามแฝงส่วนกลาง/etc/profile
ด้วยเหตุผลเดียวกันกับที่ผู้ใช้ไม่ควรกำหนดในนามแฝงของพวกเขา.profile
: ถ้าคุณทำพวกเขาจะถูกกำหนดไว้สำหรับล็อกอินเชลล์เท่านั้นและไม่ใช่สำหรับเชลล์ลูก
สุดท้ายโปรดทราบว่าไฟล์.bashrc
เริ่มต้น/etc/bash.bashrc
จะไม่มีสิ่งใด ๆ เกี่ยวกับชื่อแทนซึ่งแตกต่างจากค่าเริ่มต้นต่อผู้ใช้ มันค่อนข้างแปลกที่จะให้ชื่อแทนผู้ใช้ในไฟล์ที่พวกเขาไม่สามารถแก้ไขหรือปิดการใช้งานพวกเขา (แน่นอนพวกเขายังคงสามารถทำเช่นนั้นได้โดยการเอาชนะพวกเขาในคำจำกัดความของตัวเองในท้องถิ่นของตน.bashrc
, .bash_aliases
หรือที่อื่น ๆ .)
อ่านเพิ่มเติม