Câu trả lời:
Không, tôi không nghĩ rằng điều này là có thể. Cũng không nên. Điều này về cơ bản sẽ là một cách để tiêm mã vào một vỏ đã được khởi chạy và hoạt động và sẽ gây ra một mối đe dọa bảo mật đáng kể.
Nhiều quy trình daemon được thiết kế để làm điều này. Cách điển hình là gửi cho họ tín hiệu HUP (gác máy) khiến chúng khởi chạy lại sau khi đọc lại các tệp cấu hình của chúng. Bạn có thể kích hoạt điều này với một cái gì đó như:
pkill -HUP daemon_name
Tuy nhiên, khi làm điều này trên bash, bash chỉ tắt. Nó không phải là một daemon và hệ thống không có nó hoạt động như một.
Điểm dài và ngắn của nó là bạn có thể sẽ không tiếp tục thay đổi bashrc của mình thường xuyên khi thời gian trôi qua và nó sẽ không thành vấn đề. Khi bạn thực hiện thay đổi, bạn sẽ phải lấy lại nguồn tệp nếu bạn cần những thay đổi trong việc chạy shell.
Không có gì được xây dựng thành bash. Bạn có thể yêu cầu nó tải lại .bashrc
mỗi lần nó hiển thị lời nhắc PROMPT_COMMAND
.
## Create a timestamp file, dated like the .bashrc that was read.
## There is a small race condition: if .bashrc is modified as the shell is
## just starting, before getting to this line, this instance won't detect
## that modification.
bashrc_timestamp_file=~/.bashrc-timestamp-$$
touch -r ~/.bashrc "$bashrc_timestamp_file"
## Remove the timestamp file on exit. The timestamp file will be left
## behind on a crash.
trap 'rm "$bashrc_timestamp_file"' EXIT HUP TERM INT QUIT
maybe_reload_bashrc () {
if [[ ~/.bashrc -nt $bashrc_timestamp_file ]]; then
. ~/.bashrc
fi
}
if [[ $PROMPT_COMMAND != *maybe_reload_bashrc* ]]; then
PROMPT_COMMAND="maybe_reload_bashrc
$PROMPT_COMMAND"
fi
Đây là rất nhiều rắc rối một tập tin bổ sung truy cập cho những gì nó có giá trị. Ngoài ra, nó đặt một ràng buộc đối với bạn .bashrc
: tệp phải ở trạng thái tạm thời, tức là bạn phải có thể tải nó nhiều lần mà không có hiệu ứng xấu. Ví dụ: trong đoạn trích ở trên, tôi cẩn thận chỉ thêm maybe_reload_bashrc
vào PROMPT_COMMAND
nếu chưa có.
touch -r ~/.bashrc $bashrc_timestamp_file
sau khi tìm nguồn cung ứng ~/.bashrc
. Tôi thực sự gần như đã viết điều đó, nhưng nó không cần thiết: nó chỉ được thực hiện bởi nguồn gốc .bashrc
. Tệp dấu thời gian được cập nhật bất cứ khi nào .bashrc
được tải, không chỉ trên tải ban đầu.