Câu trả lời:
.bashrc
là một kịch bản shell mà Bash chạy bất cứ khi nào nó được bắt đầu tương tác. Nó khởi tạo một phiên shell tương tác. Bạn có thể đặt bất kỳ lệnh nào trong tệp mà bạn có thể gõ tại dấu nhắc lệnh.
Bạn đặt các lệnh ở đây để thiết lập shell để sử dụng trong môi trường cụ thể của bạn hoặc để tùy chỉnh mọi thứ theo sở thích của bạn. Một điều phổ biến để đưa vào .bashrc
là các bí danh mà bạn muốn luôn luôn có sẵn.
.bashrc
chạy trên mỗi lần khởi động shell tương tác. Nếu bạn nói:
$ bash ; bash ; bash
và sau đó đánh Ctrl-Dba lần, .bashrc
sẽ chạy ba lần. Nhưng nếu bạn nói điều này thay vào đó:
$ bash -c exit ; bash -c exit ; bash -c exit
sau đó .bashrc
sẽ không chạy, vì -c
làm cho Bash gọi không tương tác. Điều tương tự cũng đúng khi bạn chạy một kịch bản shell từ một tệp.
Tương phản .bash_profile
và .profile
chỉ được chạy khi bắt đầu một vỏ đăng nhập mới. ( bash -l
) Bạn chọn xem một lệnh đi vào .bashrc
so với .bash_profile
tùy thuộc vào việc bạn muốn nó chạy một lần hay cho mỗi lần khởi động shell tương tác.
Là một ví dụ cho các bí danh, mà tôi thích đặt vào .bashrc
, thay vào đó , bạn muốn thực hiện các PATH
điều chỉnh .bash_profile
, vì những thay đổi này thường không phải là idempotent :
export PATH="$PATH:/some/addition"
Nếu bạn đặt nó vào .bashrc
thay vào đó, mỗi khi bạn khởi chạy một lớp vỏ phụ tương tác, :/some/addition
sẽ được xử lý đến cuối của PATH
một lần nữa, tạo ra công việc bổ sung cho trình bao khi bạn gõ nhầm lệnh.
Bạn nhận được một vỏ Bash tương tác mới bất cứ khi nào bạn bao ra củavi
với :sh
, ví dụ.
.bashrc
khi nó bắt đầu như một vỏ đăng nhập. Điều này đôi khi có thể dẫn đến hành vi bất ngờ . Cách giải quyết thông thường là lấy nguồn .bashrc
từ .profile
hoặc .bash_profile
thay vào đó.
.bashrc
không được sử dụng cho các loại vỏ khác, tốt hơn hết là không lấy nguồn từ .profile
đó (có thể được sử dụng bởi các loại bash
vỏ khác).
source ~/.bashrc
hay . ~/.bashrc
hay [[ -f ~/.bashrc ]] && source. ~/.bashrc
hoặc [ -f ~/.bashrc ] && source ~/.bashrc
không làm việc?
.bashrc
thực sự có nguồn gốc (sử dụng lệnh được đề xuất từ superuser.com/a/183980/128768 ). Vấn đề tôi gặp phải thực sự là không tìm nguồn cung ứng https://github.com/junegunn/fzf
thông qua lệnh này bên trong .bashrc
: source ~/.fzf.bash
. Tôi khởi chạy một thiết bị đầu cuối mới, sau đó Ctrl
+ R
và tôi nhận được `__fzf_history__`bash: fzf: command not found
. Tôi nguồn thủ công .bashrc
và cùng một phím tắt khởi chạy fzf như mong đợi. Xin lỗi vì sự ồn ào ở đây.
Mục đích của .bashrc
tệp là cung cấp một nơi bạn có thể thiết lập các biến, hàm và bí danh, xác định lời nhắc (PS1) của bạn và xác định các cài đặt khác mà bạn muốn sử dụng mỗi khi bạn mở một cửa sổ đầu cuối mới.
Nó hoạt động bằng cách được chạy mỗi khi bạn mở một thiết bị đầu cuối, cửa sổ hoặc khung mới.
Bạn có thể thấy của tôi ở đây (pic với cú pháp tô sáng) :
HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"
Giải trình:
-1. Thiết lập tệp lịch sử của tôi để bỏ qua các bản sao và lớn hơn nhiều so với mặc định.
-2. Tùy chọn màu cho ls
tùy thuộc vào việc bạn đang sử dụng linux hay OSX
-3. Hàm " md
" để tạo và cd vào một thư mục với một lệnh
-4. Tìm nhánh git hiện tại nếu trong repo git và ...
-5. -9. Xác định một dấu nhắc PS1 tuyệt vời, như trong
-10. Cải thiện nhắc nhở PS2
-11. Đặt vi làm trình chỉnh sửa tại dòng lệnh
-12. Đặt vi làm trình chỉnh sửa mặc định
-13. thực hiện .bash_aliases
tập tin của tôi nếu nó tồn tại
-14. Thực thi tập lệnh hoàn thành tab git của tôi (cho điều khiển từ xa và các nhánh) nếu nó tồn tại.
-15. Thực thi autojump nếu nó tồn tại
-16. Cho phép cd'ing mà không cần gõ phần cd nếu phiên bản bash> = 4
-17. Thực thi tập lệnh hoàn thành bash nếu nó tồn tại
-18. Sử dụng TMUX nếu nó có mặt
-19. Thêm rvm vào PATH của tôi
-20. Sử dụng rvm nếu nó tồn tại.
Tôi đã tạo bản di động này để nó hoạt động trên bất kỳ máy linux hoặc OSX nào của tôi mà không cần tùy chỉnh - do đó, một số thử nghiệm cho sự hiện diện được thực hiện trước khi sử dụng các chức năng nhất định và các tập lệnh khác.
Điều này cũng giúp dễ dàng sử dụng toàn bộ tệp ngay lập tức trên máy mới mà không gặp sự cố ảnh hưởng đến việc mở cửa sổ đầu cuối mới.
Nó là một bash
tập tin cấu hình.
Các shell tương tác (không đăng nhập), sau đó cấu hình được đọc từ các tệp này:
$HOME/.bashrc
Đối với shell Đăng nhập, cấu hình được đọc từ các tệp này:
/etc/profile
(Luôn có nguồn gốc)$HOME/.bash_profile
(phần còn lại của các tệp này được kiểm tra theo thứ tự cho đến khi tìm thấy một tệp, sau đó không có tệp nào khác được đọc)$HOME/.bash_login
$HOME/.profile
Minh họa đơn giản về cách thức / khi chúng được tải là trong hình dưới đây.
Tôi thêm một echo
đến tôi .bashrc
và.bash_profile
xem man bash
để biết thêm thông tin
.bashrc
và phân biệt sự khác biệt giữa .bashrc
và .bash_profile
bao gồm nội dung câu trả lời của bạn. Đừng nản lòng, bạn đưa ra một nỗ lực trung thực, nhưng cố gắng tập trung vào việc trả lời các câu hỏi với một số nội dung không nằm trong các câu trả lời khác.