Câu hỏi Làm cách nào để tải lại .bashrc mà không cần đăng xuất và đăng nhập lại?


Nếu tôi thực hiện thay đổi đối với .bashrc, làm cách nào để tải lại mà không đăng xuất và đăng nhập lại?


1212
2018-03-25 17:58


gốc




Các câu trả lời:


Bạn chỉ cần nhập lệnh:

source ~/.bashrc

hoặc bạn có thể sử dụng phiên bản lệnh ngắn hơn:

. ~/.bashrc

1963
2018-03-25 18:01



Điều này không chính xác giống như đăng nhập và đăng xuất. Giả sử bạn có dòng sau trong .bashrc: export PATH=$PATH:foovà sau đó bạn thay đổi nó thành export PATH=$PATH:bar. Nếu bạn đăng nhập và đăng xuất, chỉ bar sẽ ở trong PATH, nhưng nếu bạn làm những gì bạn đề xuất, cả hai foo và bar sẽ nằm trong PATH. Bạn có biết cách này không? - HighCommander4
@ HighCommander4 - một cách rất không đạt yêu cầu để làm những gì bạn muốn là làm "bash -l" tuy nhiên điều này thực sự tạo ra một subshell mới và khi bạn đăng xuất, bạn sẽ quay trở lại shell bao "foo" vẫn còn trong PATH. Nếu bạn chỉ quan tâm đến PATH, bạn có thể làm "unset PATH" và tạo lại nó từ đầu, nhưng có lẽ dễ dàng hơn / an toàn hơn là làm "PATH = / bin: / usr / bin" trước khi tìm nguồn cung ứng .bashrc của bạn. Làm thế nào biến PATH được xây dựng trên đăng nhập thực sự là hợp lý phức tạp, liên quan đến đầu vào ít nhất là từ đăng nhập (xem "đăng nhập người đàn ông") và / etc / profile (xem "man bash"). - George Hawkins
@ Alex bạn có thể tự động hóa nó bằng cách thêm dòng ~ / .bashrc vào ~ / .bash_profile, mặc dù tôi không biết đây có phải là một phương pháp hay hay không. - Vivek Gani
Tôi cũng khuyên bạn nên tạo một bí danh (mà bạn có thể lưu trữ trong ~ / .bashrc hoặc ~ / .bash_aliases) mở .bashrc và tải lại nó sau khi thoát khỏi trình chỉnh sửa. Bạn có thể làm điều đó bằng cách kết hợp hai lệnh trong một bí danh, ví dụ như vậy (nếu vim là trình soạn thảo ưa thích của bạn, nếu không hãy trao đổi nó với một cái gì đó khác): alias editbashrc='vim ~/.bashrc; source ~/.bashrc'. Điều này sẽ làm cho việc chỉnh sửa mượt mà hơn, vì bạn không cần phải suy nghĩ về việc tải lại, sau khi thực hiện chỉnh sửa, nếu sử dụng bí danh tùy chỉnh. - Samuel Lampa
Nó sẽ ảnh hưởng chỉ có thiết bị đầu cuối hiện tại. - matepal297


hoặc bạn có thể sử dụng;

exec bash

làm điều tương tự. (và dễ nhớ hơn, ít nhất là đối với tôi)

exec lệnh thay thế shell bằng chương trình đã cho, trong ví dụ của chúng ta, nó thay thế shell của chúng ta bằng bash (với các tệp cấu hình được cập nhật)


196
2018-03-06 13:11



Tôi nghĩ rằng đây là một trong những thanh lịch nhất. - David 天宇 Wong
bash khởi đầu ... - SEoF
Bạn có thể giải thích sự khác biệt của source .bashrc lệnh và exec bash? - muradin
@muradin, source là một lệnh shell tích hợp thực hiện nội dung của tệp được truyền dưới dạng đối số, trong vỏ hiện tại. Vì vậy, trong ví dụ của bạn, nó thực thi tệp .bashrc trong trình bao hiện tại. Và exec lệnh thay thế shell bằng một chương trình đã cho, trong ví dụ của bạn, nó sẽ thay thế shell của bạn bằng bash (với các tệp cấu hình được cập nhật) - WhoSayIn
@SEoF, khi bạn nói "khởi đầu bash" và nếu bạn đang suy nghĩ những gì tôi nghĩ rằng bạn đang suy nghĩ, tôi phải nói rằng bạn là sai. Không giống như các bộ phim, bạn không tiếp tục đi vào bash từ bash khi bạn liên tục làm exec bash. Các exec chỉ huy thay thế vỏ với chương trình, trong trường hợp của chúng ta, bash. Vì vậy, luôn luôn có một ví dụ của bash trong sự tồn tại trong thiết bị đầu cuối. - John Red


Đến bổ sung và tương phản hai câu trả lời phổ biến nhất, . ~/.bashrc và exec bash:

Cả hai giải pháp hiệu quả tải lại ~/.bashrc, nhưng có sự khác biệt:

  • source ~/.bashrc sẽ bảo tồn vỏ hiện tại của bạn:

    • Ngoại trừ các sửa đổi tải lại ~/.bashrc vào vỏ hiện tại (tìm nguồn cung ứng) làm cho, các vỏ hiện tại và trạng thái của nó là bảo quản, bao gồm các biến môi trường, các biến shell, các tùy chọn shell, các hàm shell và lịch sử lệnh.
  • exec bashhoặc, mạnh mẽ hơn, exec "$BASH"[1], sẽ thay thế vỏ hiện tại của bạn với một phiên bản mới và do đó chỉ bảo vệ vỏ hiện tại của bạn biến môi trường


69
2018-01-28 23:07



Bạn trả lời câu hỏi của tôi trước khi tôi có thể hỏi nó. Điều này là tốt để biết; Tôi thường đặt CLASSPATH cho một phiên duy nhất. - swinefish
Vì vậy, ngay cả khi tôi gọi exec "$ BASH" sẽ các biến mà bộ bashrc được tìm thấy trong shell tôi mở tiếp theo (sử dụng cùng một tập tin thực thi như phiên hiện tại của tôi)? - nitinr708
@ nitinr708: Có, exec $BASH sẽ nguồn ~/.bashrc, vì vậy bạn sẽ thấy các thay đổi của nó đối với môi trường trình bao trong phiên mới. - mklement0
Các báo giá xung quanh $ BASH cho là gì? Họ có cần thiết không? - jena
@jena: Vui lòng xem cập nhật cho chú thích trong câu trả lời. - mklement0


Ai đó đã chỉnh sửa câu trả lời của tôi để thêm tiếng Anh không chính xác, nhưng đây là bản gốc, thấp hơn câu trả lời được chấp nhận.

. .bashrc

43
2018-03-25 17:59



Điều này sẽ chỉ hoạt động nếu thư mục hiện tại của bạn thực sự là thư mục chính của bạn. Sau đây sẽ làm việc:. ~ / .bashrc - Brian Showalter
Điều gì làm cho công việc này? Điều gì thực sự xảy ra khi tôi làm ".. Bashrc"? Cảm ơn! - Jed Daniels
. là một phím tắt BASH cho lệnh nội trang "nguồn". Vì vậy, ".. Bashrc" giống như "source .bashrc" với trình thông dịch BASH. - Brian Showalter
Mát mẻ. Cảm ơn. Bây giờ tôi không biết. - Jed Daniels
Tôi vừa gửi yêu cầu chỉnh sửa để thêm ~/, nhưng vì câu trả lời hàng đầu cho thấy cả hai source ~/.bashrc và . ~/.bashrc Tôi tự hỏi nếu câu trả lời này chỉ nên được xóa như dư thừa. - Max Ghenis


Tùy thuộc vào môi trường của bạn, chỉ cần gõ

bash

cũng có thể hoạt động.


15
2018-03-08 11:51



Tuy nhiên, điều này sẽ gọi một vỏ mới trong vòng hiện tại, do đó lãng phí tài nguyên. Sử dụng tốt hơn @ WhoSayln's exec giải pháp nào thay thế shell hiện tại với shell mới được gọi. - Bernhard Wagner
vâng chỉ sử dụng nguồn. Điều này hoàn toàn không cần thiết và gây phiền nhiễu. - dylnmc
Ngoài nhận xét của @ BernhardWagner, bạn cũng mất lịch sử bash hiện tại nếu bạn sinh ra một vỏ mới - peter


Với điều này, bạn sẽ không thậm chí phải gõ "source ~ / .bashrc":

Bao gồm tệp bashrc của bạn:

alias rc="vim ~/.bashrc && source ~/.bashrc"

Mỗi lần bạn muốn chỉnh sửa bashrc của mình, chỉ cần chạy bí danh "rc"


12
2018-02-29 19:39





TL; DR

. ~/.bashrc

TMI

. ~/.bashrc

. là một phím tắt BASH cho lệnh nội trang "nguồn". - Brian Showalter

source ~/.bashrc

Thay thế

exec bash
  • source là một lệnh shell tích hợp thực hiện nội dung của tệp được truyền dưới dạng đối số, trong vỏ hiện tại.
  • exec chỉ huy thay thế vỏ với một chương trình cụ thể ...
  • - Ai nói trong

6
2018-02-14 21:34



exec bash vẫn thừa hưởng môi trường của trình bao hiện tại. exec env -i bashsẽ gần hơn (hoặc exec env -i bash -l nếu bạn hiện đang ở trong một vỏ đăng nhập). - chepner


kiểu:

source .bashrc

3
2018-03-25 18:00



Một lần nữa, chỉ hoạt động nếu bạn đang ở trong thư mục chính, hoặc chính xác hơn, trong thư mục .bashrc nằm. Một cách chính xác hơn để làm điều này, như đã nói trong câu trả lời được chấp nhận, là source ~/.bashrc. - John Red


tôi sử dụng lệnh sau trên msysgit

. ~/.bashrc

phiên bản ngắn hơn của

source ~/.bashrc

2
2017-10-02 20:32



Đây là câu trả lời được chấp nhận trong 4 năm? - jwg
@ jwg câu trả lời được chấp nhận là. .bashrc. sẽ chỉ hoạt động nếu bạn đang ở trong thư mục chính trên msysgit. - Sojan V Jose
@ jwg ok i mỏng tôi đã đề cập đến rằng bạn không cần phải gõ 'nguồn ~ /. bashrc' thay vì sử dụng phiên bản ngắn hơn. - Sojan V Jose
@ jwg okay tôi đã thêm nó dưới dạng chỉnh sửa cho câu trả lời gốc :) - Sojan V Jose
Tại sao câu trả lời dư thừa @Sojan? - nitinr708


Điều này cũng sẽ làm việc ..

cd ~
source .bashrc

1
2018-03-04 13:15



Nó có, nhưng nó cũng thay đổi thư mục làm việc thành ~, cái mà không muốn. - Albin
Cảm ơn bạn đã giữ cho bối cảnh còn sống @Krinkle - nitinr708


Tôi nhận thấy rằng tinh khiết exec bash lệnh sẽ bảo vệ các biến môi trường, vì vậy bạn cần sử dụng exec -c bash để chạy bash trong một môi trường trống.

Ví dụ, bạn đăng nhập một bash, và export A=1, nếu bạn exec bash, các A == 1.

nếu bạn exec -cl bash, A trống.

Tôi nghĩ đây là cách tốt nhất để làm công việc của bạn.


0
2018-05-22 13:53