หากฉันทำการเปลี่ยนแปลง.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 bash
A == 1
หากคุณexec -cl bash
, A
เป็นที่ว่างเปล่า
ฉันคิดว่านี่เป็นวิธีที่ดีที่สุดในการทำงานของคุณ
ฉันมี
alias ..='source ~/.bashrc'
ใน bashrc ของฉันเพื่อที่ฉันจะสามารถใช้ ".. " เพื่อโหลดซ้ำได้
..
เป็นนามแฝงcd ..
ดังนั้นมันจะสับสนมาก
alias rehash='source ~/.bashrc'
เป็นทางเลือกของฉัน
export PATH=$PATH:foo
export PATH=$PATH:bar
หากคุณเข้าสู่ระบบและออกจากระบบbar
จะอยู่ใน PATH แต่ถ้าคุณทำสิ่งที่คุณแนะนำทั้งสองfoo
และbar
จะอยู่ใน PATH คุณรู้วิธีรอบนี้หรือไม่?