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 exec
lệ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 .bashrc
lệnh và exec bash
?
source
là 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à exec
lệ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)
. ~/.bashrc
sẽ thực thi dash
thay bash
vì vậy, có lỗi vì shopt
bị thiếu. source
khô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 ~/.bashrc
sẽ 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 bash
sẽ 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 exec
lệ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 . ~/.bashrc
và exec bash
:
Cả hai giải pháp tải lại hiệu quả~/.bashrc
, nhưng có sự khác biệt:
. ~/.bashrc
hoặc source ~/.bashrc
sẽ bảo vệ vỏ hiện tại của bạn :
~/.bashrc
và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 bash
hoặ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 bash
mặ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 $BASH
luô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 $BASH
sẽ 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 ~/.bashrc
và . ~/.bashrc
tô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
exec
lệnh thay thế shell bằng một chương trình đã cho ... - WhoSayIn
exec bash
vẫn kế thừa môi trường của shell hiện tại. exec env -i bash
sẽ gần hơn (hoặc exec env -i bash -l
nế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 ~/.bashrc
mỗ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") ~/.bashrc
tệ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_username
thự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
, --login
sẽ 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_login
hoặ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 bash
lệ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
, A
trố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,bar
sẽ chỉ có trong PATH, nhưng nếu bạn làm theo những gì bạn đề xuất, cả haifoo
vàbar
sẽ ở trong PATH. Bạn có biết một cách xung quanh này?