เหตุใดการตั้งชื่อแทนใน. โปรไฟล์จึงไม่ทำงาน


11

ฉันมีสิ่งนี้เป็นบรรทัดสุดท้ายใน. profile ของฉัน:

alias gl="cd /home/jrenner/glances/glances"

แต่แม้หลังจากรีบูตฉันไม่พบคำสั่งเมื่อพิมพ์ gl เกิดอะไรขึ้น? ฉันเข้าสู่ระบบในฐานะผู้ใช้ที่ถูกต้อง


คุณพิมพ์อยู่glที่ไหน สถานี? GUI หรือไม่
โธมัสวอร์ด

1
ไม่มีใครเคยพูดต้นฉบับทำไม คำถาม. ฉันสามารถยืนยันได้ว่าชื่อแทนที่กำหนดไว้.profileไม่ทำงานในบริบทใด ๆ ที่ฉันลอง: การลงชื่อเข้าใช้คอนโซลข้อความเทอร์มินัลกราฟิกหรือสิ่งอื่นใดแม้ว่าตัวแปรสภาพแวดล้อมจากไฟล์เดียวกันจะทำงาน
Daniel Mahler

@DanielMahler คุณมีเหตุผลไหม
Maged Saeed

คำตอบ:


4

ฉันค่อนข้างมั่นใจว่าความคิดของ lpanebr จะใช้ได้ แต่นี่เป็นทางออกที่ดีกว่า ทำคำสั่ง alias ใน.bashrc นั่นเป็นวิธีที่ฉันทำหรือบางคนชอบที่จะเพิ่มไฟล์เฉพาะกับนามแฝง โทร.aliasหรืออะไรก็ได้และเพิ่ม.aliasไปยังของคุณ.bashrc

หวังว่าฉันจะจัดรูปแบบเช่น @lpanelbr ฉันสงสัยว่ามีวิกิหรือไม่?


1
สำหรับการจัดรูปแบบ askubuntu ใช้ markdown กรุณาตรวจสอบaskubuntu.com/editing-helpสำหรับรายละเอียด
saji89

1
ทำไมถึง.bashrcทำงานในขณะที่.profileไม่ได้? นอกจากนี้ยังมีเหตุผลว่าทำไมคุณเลือกที่จะตั้งชื่อไฟล์นามแฝง.alliasมากกว่า.alias?
ทอม

# 1 จากสิ่งที่ฉันเข้าใจ. bashrc เป็นข้อมูลเฉพาะสำหรับ bash และ. profile เป็นข้อมูลเฉพาะสำหรับบรรทัดคำสั่งที่ไม่ใช่ bash # 2 ฉันไม่รู้ว่าคุณหมายถึงอะไร ฉันสามารถสะกดหลังจากทั้งหมด (แก้ไข)
Jason

7

มีเหตุผลที่เกี่ยวข้องสองประการที่ทำให้ชื่อแทนไม่ทำงานเสมอเมื่อใส่ใน.profileไฟล์ อย่างแรกคือไฟล์.profile(หรือ.bash_profile) นั้นจะรันสำหรับเชลล์ล็อกอินเท่านั้น หากคุณเริ่มทุบตีในหน้าต่างเทอร์มินัลภายใต้ X ตัวจำลองเทอร์มินัลของคุณ (เช่น gnome-termanl) อาจไม่ได้ใช้ bash เป็นเชลล์ล็อกอิน [ส่วนใหญ่มีตัวเลือกในการเปลี่ยนแปลงสิ่งนี้หากคุณต้องการ แต่ค่าเริ่มต้น (สำหรับ gnome-termal ต่อไป) จะไม่เรียกใช้เป็นเชลล์การเข้าสู่ระบบ]
เชลล์จะเป็นเชลล์แบบโต้ตอบและ.bashrcจะถูกเรียกใช้

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

หากต้องการดูสิ่งนี้ลองการทดลองนี้:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

โปรดทราบว่า.bashrcจะไม่ทำงานโดยการทุบตีเมื่อมันเริ่มเป็นเปลือกเข้าสู่ระบบ ดังนั้นการวางนามแฝงของคุณจะไม่สามารถทำงานได้เว้นแต่คุณ.bashrcจะได้รับจากแหล่งของคุณ.profileซึ่งเป็นวิธีปฏิบัติทั่วไป


ตรวจสอบแล้ว: การเพิ่มsource .bashrcใน.bash_profileอนุญาตให้นามแฝงที่ตั้งไว้ใน. bashrc ทำงาน
Treefish Zhang

ดูเหมือนว่านี่ควรเป็นคำตอบที่ถูกต้อง นอกจากนี้ในอูบุนตูก็เพิ่มนามแฝงของคุณ~/.bash_aliasesด้วย นั่นเป็นวิธีที่เหมาะสมที่จะทำ (อ่านไฟล์. bashrc เพื่อดูรายละเอียด)
Emilio M.

0

หากคุณใช้ bash ( echo $SHELL) เป็นล่ามเชลล์ฉันคิดว่ามันดีที่สุด (หรืออาจเป็นวิธีเดียว) ถ้าคุณกำหนดฟังก์ชั่นซีดีของคุณเอง

แก้ไข.bashrcไฟล์ของคุณและเพิ่มรายการต่อไปนี้ในตอนท้าย:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

คุณสามารถขยายได้เช่น:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

และเปลี่ยนโดยตรงไปยังไดเรกทอรีย่อยและรายการเนื้อหา


1
นั่นอาจเป็นข้อเสนอแนะที่ดี แต่ไม่ใช่คำตอบเนื่องจากไม่ได้อธิบายว่าทำไมaliasคำสั่งที่วางไว้ใน.profileไฟล์จึงล้มเหลว
Tom

0
$ bash #start a new bash instance

นี่เป็นปัญหากับเซิร์ฟเวอร์ของฉัน Simple source .profileไม่ทำงานด้วยเหตุผลบางอย่าง


0

~/.bash_aliasesวิธีที่จะทำเช่นนี้ในอูบุนตูคือการเพิ่มนามแฝงของคุณเพื่อ สร้างไฟล์หากไม่มีอยู่

ไฟล์นี้ (ถ้ามี) ถูกเรียกจากค่าเริ่มต้น~/.bashrcและนามแฝงจะพร้อมใช้งานในเทอร์มินัลอีมูเลเตอร์ของคุณด้วย

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