หากฉันทำการเปลี่ยนแปลง.bashrcฉันจะโหลดซ้ำได้อย่างไรโดยไม่ต้องออกจากระบบและกลับเข้ามาใหม่
หากฉันทำการเปลี่ยนแปลง.bashrcฉันจะโหลดซ้ำได้อย่างไรโดยไม่ต้องออกจากระบบและกลับเข้ามาใหม่
คำตอบ:
คุณเพียงแค่ต้องป้อนคำสั่ง:
source ~/.bashrc
หรือคุณสามารถใช้เวอร์ชันที่สั้นกว่าของคำสั่ง:
. ~/.bashrc
alias editbashrc='vim ~/.bashrc; source ~/.bashrc'(ถ้าเป็นกลุ่มเป็นบรรณาธิการที่ต้องการของคุณมิฉะนั้นสลับออกไปเป็นอย่างอื่น): สิ่งนี้จะทำให้การแก้ไขราบรื่นยิ่งขึ้นเนื่องจากคุณไม่จำเป็นต้องคิดถึงการโหลดซ้ำหลังจากทำการแก้ไขหากใช้นามแฝงที่กำหนดเอง
หรือคุณสามารถใช้:
exec bash
สิ่งนี้ทำสิ่งเดียวกันและจดจำได้ง่ายกว่า (อย่างน้อยสำหรับฉัน)
execคำสั่งสมบูรณ์แทนที่กระบวนการเปลือกโดยการทำงานที่ระบุบรรทัดคำสั่ง ในตัวอย่างของเรามันจะแทนที่สิ่งที่เชลล์ปัจจุบันอยู่กับอินสแตนซ์ใหม่ของbash(ด้วยไฟล์คอนฟิกูเรชันที่อัพเดต)
source .bashrcคำสั่งและexec bash?
sourceเป็นในตัวคำสั่งของเชลล์ที่รันเนื้อหาของไฟล์ผ่านเป็นอาร์กิวเมนต์ในเปลือกปัจจุบัน ดังนั้นในตัวอย่างของคุณมันรันไฟล์. bashrc ในเชลล์ปัจจุบัน และexecคำสั่งแทนที่เชลล์ด้วยโปรแกรมที่กำหนดในตัวอย่างของคุณมันจะแทนที่เชลล์ด้วย bash (พร้อมไฟล์การกำหนดค่าที่อัปเดต)
. ~/.bashrcจะดำเนินการdashแทนbashดังนั้นจึงมีข้อผิดพลาดเนื่องจากshoptขาดหายไป sourceไม่พบจากเชลล์ดังนั้นโซลูชันจึงออกมาเช่นกัน ฉันลองสิ่งนี้และภาพนักเทียบท่าสร้างขึ้นอย่างราบรื่น!
source ~/.bashrcจะรักษาสภาพแวดล้อมเชลล์ทั้งหมดของคุณ(แม้ว่าอาจมีการแก้ไขโดยการจัดหา~/.bashrc) ในขณะที่exec bashจะรักษาตัวแปรสภาพแวดล้อมของเชลล์ปัจจุบันเท่านั้น(การเปลี่ยนแปลงแบบ ad-hoc ใด ๆ กับเชลล์ปัจจุบันในแง่ของตัวแปรเชลล์ฟังก์ชันและตัวเลือกจะหายไป) ขึ้นอยู่กับความต้องการของคุณวิธีการหนึ่งหรือวิธีอื่นอาจเป็นที่ต้องการ
exec bashซึ่งแตกต่างจากหนังที่คุณไม่ได้เก็บไว้ในการที่จะเข้าสู่การทุบตีจากทุบตีเมื่อคุณทำซ้ำ ๆ execคำสั่งแทนที่เปลือกกับโปรแกรมในกรณีของเราทุบตี ดังนั้นจึงมีอินสแตนซ์หนึ่งของการทุบตีอยู่ในเทอร์มินัล
เพื่อเสริมและเปรียบต่างคำตอบที่ได้รับความนิยมมากที่สุดสองรายการ. ~/.bashrcและexec bash:
โซลูชันทั้งสองโหลดใหม่ได้อย่างมีประสิทธิภาพ~/.bashrcแต่มีความแตกต่าง:
. ~/.bashrcหรือsource ~/.bashrcจะเก็บเปลือกปัจจุบันของคุณ :
~/.bashrcเข้าไปในเปลือกปัจจุบัน ( sourcing ) ทำให้เปลือกปัจจุบันและสถานะของมันจะถูกเก็บรักษาไว้ซึ่งรวมถึงตัวแปรสภาพแวดล้อมตัวแปรเปลือกตัวเลือกเปลือกหอยเปลือกฟังก์ชั่นและประวัติคำสั่งexec bashหรือexec "$BASH"[1]แข็งแกร่งขึ้นจะแทนที่เชลล์ปัจจุบันของคุณด้วยอินสแตนซ์ใหม่และดังนั้นจะรักษาตัวแปรสภาพแวดล้อมของเชลล์ปัจจุบันของคุณเท่านั้น (รวมถึงเชลล์ที่คุณกำหนดไว้ในโฆษณา)
ขึ้นอยู่กับความต้องการของคุณอาจเลือกวิธีใดวิธีหนึ่ง
[1] exec bashสามารถในทฤษฎีดำเนินการที่แตกต่างกัน ปฏิบัติการมากกว่าหนึ่งที่เริ่มต้นเปลือกปัจจุบันถ้ามันเกิดขึ้นอยู่ในไดเรกทอรีที่ระบุไว้ก่อนหน้านี้ในbash $PATHเนื่องจากตัวแปรพิเศษ$BASHจะมีพา ธ เต็มของไฟล์สั่งการที่เริ่มต้นเชลล์ปัจจุบันexec "$BASH"อยู่เสมอดังนั้นจึงรับประกันได้ว่าจะใช้ไฟล์ปฏิบัติการเดียวกันได้
หมายเหตุ"..."เกี่ยว$BASHกับการอ้างอิงสองครั้งทำให้มั่นใจว่าค่าตัวแปรถูกใช้ตามสภาพโดยไม่ต้องตีความโดย Bash; หากค่าไม่มีช่องว่างที่ฝังตัวหรือตัวบ่งชี้เชลล์อื่น ๆ (ซึ่งไม่น่าจะเกิดในกรณีนี้) คุณไม่จำเป็นต้องใช้เครื่องหมายคำพูดคู่ แต่การใช้มันเป็นนิสัยที่ดี
exec $BASHจะเป็นแหล่งที่มา~/.bashrcดังนั้นคุณจะเห็นการเปลี่ยนแปลงสภาพแวดล้อมของเชลล์ในเซสชันใหม่
มีคนแก้ไขคำตอบของฉันเพื่อเพิ่มภาษาอังกฤษที่ไม่ถูกต้อง แต่ที่นี่เป็นของจริง
. .bashrc
~/แต่เนื่องจากคำตอบยอดนิยมแสดงทั้งคู่source ~/.bashrcและ. ~/.bashrcฉันสงสัยว่าคำตอบนี้ควรถูกลบซ้ำซ้อน
ขึ้นอยู่กับสภาพแวดล้อมของคุณเพียงพิมพ์
bash
อาจใช้งานได้
ด้วยสิ่งนี้คุณจะไม่ต้องพิมพ์ "source ~ / .bashrc":
รวมไฟล์ bashrc ของคุณ:
alias rc="vim ~/.bashrc && source ~/.bashrc"
ทุกครั้งที่คุณต้องการแก้ไข bashrc ของคุณเพียงแค่เรียกใช้นามแฝง " rc "
. ~/.bashrc
source ~/.bashrc
exec bash
execคำสั่งแทนที่เชลล์ด้วยโปรแกรมที่กำหนด ... - WhoSayIn
exec bashยังคงสืบทอดสภาพแวดล้อมของเชลล์ปัจจุบัน exec env -i bashจะใกล้ชิดขึ้น (หรือexec env -i bash -lถ้าคุณอยู่ในเปลือกเข้าสู่ระบบในปัจจุบัน)
คุณอาจต้องการเพิ่มสคริปต์เพื่อให้โหลด. bashrc โดยอัตโนมัติเมื่อคุณเปิดเซสชัน SSH ทั้งนี้ขึ้นอยู่กับสภาพแวดล้อมของคุณ ฉันเพิ่งย้ายข้อมูลไปยังเซิร์ฟเวอร์ที่ใช้ Ubuntu และที่นั่นไฟล์. profile ไม่ใช่. bashrc หรือ. bash_profile ถูกโหลดโดยค่าเริ่มต้น ในการรันสคริปต์ใด ๆ ใน. bashrc ฉันต้องเรียกใช้source ~/.bashrcทุกครั้งที่มีการเปิดเซสชันซึ่งไม่ได้ช่วยเมื่อเรียกใช้ deploys ระยะไกล
หากต้องการให้. bashrc ของคุณโหลดโดยอัตโนมัติเมื่อเปิดเซสชันให้ลองเพิ่มลงใน. profile:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
เปิดเซสชันของคุณอีกครั้งและควรโหลดพา ธ / สคริปต์ที่คุณมีใน. bashrc
ฉันใช้ easyengine เพื่อตั้งค่าเซิร์ฟเวอร์ vultr บนคลาวด์ของฉัน ผมพบว่าไฟล์ทุบตีฉันที่
/etc/bash.bashrc
ดังนั้นsource /etc/bash.bashrcเคล็ดลับสำหรับฉัน!
ปรับปรุง
เมื่อตั้งค่าเซิร์ฟเวอร์เปล่า (Ubuntu 16.04) คุณสามารถใช้ข้อมูลข้างต้นเมื่อคุณยังไม่ได้ตั้งชื่อผู้ใช้และเข้าสู่ระบบผ่านทางรูท
เป็นการดีที่สุดที่จะสร้างผู้ใช้ (ที่มีสิทธิ์ sudo) และลงชื่อเข้าใช้ด้วยชื่อผู้ใช้นี้แทน
สิ่งนี้จะสร้างไดเรกทอรีสำหรับการตั้งค่าของคุณรวมถึงไฟล์. profile และ. bashrc
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/
ตอนนี้คุณจะแก้ไขและ (และ "แหล่งที่มา") ~/.bashrcไฟล์
บนเซิร์ฟเวอร์ของฉันนี้ตั้งอยู่ที่/home/your_username/.bashrc
(ที่your_usernameจริงแล้วเป็นชื่อผู้ใช้ใหม่ที่คุณสร้างไว้ด้านบนและตอนนี้เข้าสู่ระบบด้วย)
exec bash เป็นวิธีที่ยอดเยี่ยมในการเรียกใช้งานใหม่และเปิดตัวเชลล์ใหม่เพื่อแทนที่ปัจจุบัน เพียงเพิ่มคำตอบ $ SHELL จะส่งคืนเชลล์ปัจจุบันซึ่งเป็น bash โดยใช้สิ่งต่อไปนี้มันจะทำการรีโหลดเชลล์ปัจจุบันและไม่เพียง แต่จะ bash
exec $SHELL -l;
สำหรับฉันจะทำงานเมื่อฉันเปลี่ยนเส้นทางคือ: exec "$BASH" --login
~/.bashrcซึ่ง--loginจะไม่โหลดโดยตรง (โดยตรง) ที่ระดับผู้ใช้จะเป็นการโหลด~/.bash_profile(หรือ~/.bash_loginหรือ~/.profile) แทน
พิมพ์:
source ~/.bashrc
หรือในรูปแบบที่สั้นกว่า:
. ~/.bashrc
.bashrcตั้งอยู่ source ~/.bashrcวิธีที่ถูกต้องมากขึ้นในการทำเช่นนี้เป็นบอกในคำตอบที่ได้รับการยอมรับเป็น
ฉันใช้คำสั่งต่อไปนี้ใน msysgit
. ~/.bashrc
รุ่นที่สั้นกว่าของ
source ~/.bashrc
สมมติว่าเชลล์เชิงโต้ตอบและคุณต้องการเก็บประวัติคำสั่งปัจจุบันของคุณและยังโหลด / etc / โปรไฟล์ (ซึ่งโหลดข้อมูลสภาพแวดล้อมรวมถึง / etc / bashrc และบน Mac OS X โหลดพา ธ ที่กำหนดไว้ใน /etc/paths.d/ ผ่าน path_helper) ผนวกประวัติคำสั่งของคุณและทำ bash ด้วยตัวเลือกเข้าสู่ระบบ ('-l'):
history -a && exec bash -l
ฉันสังเกตเห็นว่าexec bashคำสั่งบริสุทธิ์จะรักษาตัวแปรสภาพแวดล้อมดังนั้นคุณต้องใช้exec -c bashเพื่อรัน bash ในสภาพแวดล้อมที่ว่างเปล่า
ตัวอย่างเช่นคุณเข้าสู่ระบบทุบตีและexport A=1ถ้าคุณที่exec bashA == 1
หากคุณexec -cl bash, Aเป็นที่ว่างเปล่า
ฉันคิดว่านี่เป็นวิธีที่ดีที่สุดในการทำงานของคุณ
ฉันมี
alias ..='source ~/.bashrc'
ใน bashrc ของฉันเพื่อที่ฉันจะสามารถใช้ ".. " เพื่อโหลดซ้ำได้
..เป็นนามแฝงcd ..ดังนั้นมันจะสับสนมาก
alias rehash='source ~/.bashrc'เป็นทางเลือกของฉัน
export PATH=$PATH:fooexport PATH=$PATH:barหากคุณเข้าสู่ระบบและออกจากระบบbarจะอยู่ใน PATH แต่ถ้าคุณทำสิ่งที่คุณแนะนำทั้งสองfooและbarจะอยู่ใน PATH คุณรู้วิธีรอบนี้หรือไม่?