Nếu tôi thay đổi .bashrc, làm cách nào để tải lại mà không cần đăng xuất và đăng nhập lại?
Nếu tôi thay đổi .bashrc, làm cách nào để tải lại mà không cần đăng xuất và đăng nhập lại?
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 ngắn hơn của lệnh:
. ~/.bashrc
alias editbashrc='vim ~/.bashrc; source ~/.bashrc'. Điều này sẽ giúp việc chỉnh sửa mượt mà hơn rất nhiều, 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.
Hoặc bạn có thể sử dụng:
exec bash
Điều này cũng làm điều tương tự, và dễ nhớ hơn (ít nhất là đối với tôi).
Các execlệnh thay thế hoàn toàn quá trình shell bằng cách chạy dòng lệnh chỉ định. Trong ví dụ của chúng tôi, nó thay thế bất cứ thứ gì hiện tại là với một thể hiện mới bash(với các tệp cấu hình được cập nhật).
source .bashrclệnh và exec bash?
sourcelà một lệnh shell tích hợp thực thi nội dung của tệp được truyền dưới dạng đối số, trong shell 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à execlệnh thay thế shell bằng một chương trình nhất định, trong ví dụ của bạn, nó 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)
. ~/.bashrcsẽ thực thi dashthay bashvì vậy, có lỗi vì shoptbị thiếu. sourcekhông tìm thấy từ vỏ, vì vậy giải pháp cũng được đưa ra. Tôi đã thử điều này và hình ảnh docker được xây dựng trơn tru!
source ~/.bashrcsẽ bảo toàn toàn bộ môi trường shell của bạn (mặc dù có thể được sửa đổi bởi nguồn của ~/.bashrc), trong khi đó exec bashsẽ chỉ bảo toàn các biến môi trường của shell hiện tại của bạn (mọi thay đổi đặc biệt đối với shell hiện tại về các biến shell, hàm, tùy chọn đều bị mất). Tùy thuộc vào nhu cầu của bạn, một hoặc cách tiếp cận khác có thể được ưa thích.
exec bash. Các execlệnh thay thế vỏ với các chương trình, trong trường hợp, bash của chúng tôi. Vì vậy, luôn có một ví dụ về bash tồn tại trong thiết bị đầu cuối.
Để bổ sung và đối chiếu hai câu trả lời phổ biến nhất . ~/.bashrcvà exec bash:
Cả hai giải pháp tải lại hiệu quả~/.bashrc , nhưng có sự khác biệt:
. ~/.bashrchoặc source ~/.bashrcsẽ bảo vệ vỏ hiện tại của bạn :
~/.bashrcvào vỏ hiện tại ( nguồn ) làm cho, các vỏ hiện tại và trạng thái của nó được bảo tồn , trong đó bao gồm các biến môi trường, biến vỏ, tùy chọn vỏ, chức năng vỏ, và lịch sử lệnh.exec bashhoặc, mạnh mẽ hơn, exec "$BASH"[1] , sẽ thay thế trình bao hiện tại của bạn bằng một thể hiện mới và do đó chỉ bảo toàn các biến môi trường của trình bao hiện tại của bạn (bao gồm cả các biến bạn đã xác định đặc biệt).
Tùy thuộc vào nhu cầu của bạn, một hoặc cách tiếp cận khác có thể được ưa thích.
Về exec bashmặt lý thuyết, [1] có thể thực thi một tệp thực thi khác bash với lớp khởi động shell hiện tại, nếu nó xảy ra trong một thư mục được liệt kê trước đó trong $PATH. Do biến đặc biệt $BASHluôn chứa đường dẫn đầy đủ của tệp thực thi đã khởi động shell hiện tại, nên exec "$BASH"được đảm bảo sử dụng cùng một tệp thực thi.
Một ghi chú lại "..."xung quanh $BASH: trích dẫn kép đảm bảo rằng giá trị biến được sử dụng nguyên trạng, mà không cần giải thích bởi Bash; nếu giá trị không có không gian nhúng hoặc siêu ký tự shell khác (không có khả năng trong trường hợp này), bạn không thực sự cần dấu ngoặc kép, nhưng sử dụng chúng là một thói quen tốt để hình thành.
exec $BASHsẽ có nguồn ~/.bashrc, vì vậy bạn sẽ thấy những thay đổi của nó đối với môi trường shell trong phiên mới.
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, kém hơn câu trả lời được chấp nhận.
. .bashrc
~/, nhưng vì câu trả lời hàng đầu hiển thị cả hai source ~/.bashrcvà . ~/.bashrctôi tự hỏi liệu câu trả lời này có nên bị xóa là dư thừa không.
Tùy thuộc vào môi trường của bạn, chỉ cần gõ
bash
cũng có thể làm việc
. ~/.bashrc
source ~/.bashrc
exec bash
execlệnh thay thế shell bằng một chương trình đã cho ... - WhoSayIn
exec bashvẫn kế thừa môi trường của shell hiện tại. exec env -i bashsẽ gần hơn (hoặc exec env -i bash -lnếu bạn hiện đang ở trong vỏ đăng nhập).
Tùy thuộc vào môi trường của bạn, bạn có thể muốn thêm tập lệnh để tải .bashrc tự động khi bạn mở phiên SSH. Gần đây tôi đã thực hiện di chuyển đến một máy chủ chạy Ubuntu và ở đó, .profile, không phải .bashrc hoặc .bash_profile được tải theo mặc định. Để chạy bất kỳ tập lệnh nào trong .bashrc, tôi phải chạy source ~/.bashrcmỗi khi một phiên được mở, điều này không giúp ích gì khi chạy các triển khai từ xa.
Để tải .bashrc của bạn tự động khi mở phiên, hãy thử thêm phần này vào .profile:
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Mở lại phiên của bạn và nó sẽ tải bất kỳ đường dẫn / tập lệnh nào bạn có trong .bashrc.
Tôi đã sử dụng easyengine để thiết lập máy chủ dựa trên đám mây vultr của mình.
Tôi tìm thấy tập tin bash của tôi tại /etc/bash.bashrc.
Vì vậy, source /etc/bash.bashrcđã lừa cho tôi!
cập nhật
Khi thiết lập một máy chủ trống (ubfox 16.04), bạn có thể sử dụng thông tin trên, khi bạn chưa thiết lập tên người dùng và đang đăng nhập qua root.
Tốt nhất là tạo một người dùng (với sudo privateledges) và đăng nhập làm tên người dùng này.
Điều này sẽ tạo một thư mục cho các cài đặt của bạn, bao gồm các tệp .profile và .bashrc.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ub Ubuntu /
Bây giờ, bạn sẽ chỉnh sửa và (và "nguồn") ~/.bashrctệp.
Trên máy chủ của tôi, địa chỉ này được đặt tại /home/your_username/.bashrc
(nơi your_usernamethực sự là tên người dùng mới mà bạn đã tạo ở trên và hiện đang đăng nhập)
exec bash là một cách tuyệt vời để thực hiện lại và khởi chạy một shell mới để thay thế hiện tại. chỉ để thêm vào câu trả lời, $ SHELL trả về shell hiện tại là bash. Bằng cách sử dụng như sau, nó sẽ tải lại shell hiện tại, và không chỉ để bash.
exec $SHELL -l;
Đối với tôi những gì hoạt động khi tôi thay đổi PATH là: exec "$BASH" --login
~/.bashrc, --loginsẽ không (trực tiếp) tải lại; ở cấp độ người dùng, nó sẽ tải lại ~/.bash_profile(hoặc ~/.bash_loginhoặc ~/.profile) thay vào đó.
kiểu:
source ~/.bashrc
hoặc, ở dạng ngắn hơn:
. ~/.bashrc
.bashrcđược đặt. 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.
tôi sử dụng lệnh sau trên msysgit
. ~/.bashrc
phiên bản ngắn hơn của
source ~/.bashrc
Giả sử trình bao tương tác và bạn muốn giữ lịch sử lệnh hiện tại của mình và cũng tải / etc / profile (tải dữ liệu môi trường bao gồm / etc / bashrc và trên Mac OS X tải các đường dẫn được xác định trong /etc/paths.d/ thông qua path_helper), nối thêm lịch sử lệnh của bạn và thực hiện bash với tùy chọn đăng nhập ('-l'):
history -a && exec bash -l
Tôi nhận thấy rằng exec bashlệnh thuần sẽ bảo toàn 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ô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, Atrống rỗng.
Tôi nghĩ rằng đây là cách tốt nhất để làm công việc của bạn.
cá nhân tôi có
alias ..='source ~/.bashrc'
trong bashrc của tôi, để tôi có thể chỉ cần sử dụng ".." để tải lại nó.
..như một bí danh cho cd .., vì vậy nó sẽ rất khó hiểu.
alias rehash='source ~/.bashrc'là lựa chọn của tôi
export PATH=$PATH:foo, và sau đó bạn đổi nó thànhexport PATH=$PATH:bar. Nếu bạn đăng nhập và thoát ra,barsẽ chỉ có trong PATH, nhưng nếu bạn làm theo những gì bạn đề xuất, cả haifoovàbarsẽ ở trong PATH. Bạn có biết một cách xung quanh này?