.bashrcadalah skrip shell yang dijalankan Bash setiap kali dijalankan secara interaktif. Ini menginisialisasi sesi shell interaktif. Anda bisa meletakkan perintah apa pun di file itu yang bisa Anda ketik di command prompt.
Anda menempatkan perintah di sini untuk mengatur shell untuk digunakan di lingkungan khusus Anda, atau untuk menyesuaikan hal-hal sesuai preferensi Anda. Hal yang umum untuk dimasukkan .bashrcadalah alias yang Anda ingin selalu tersedia.
.bashrcberjalan pada setiap peluncuran shell interaktif. Jika Anda mengatakan:
$ bash ; bash ; bash
dan kemudian tekan Ctrl-Dtiga kali, .bashrcakan berjalan tiga kali. Tetapi jika Anda mengatakan ini sebagai gantinya:
$ bash -c exit ; bash -c exit ; bash -c exit
maka .bashrctidak akan berjalan sama sekali, karena -cmembuat panggilan Bash non-interaktif. Hal yang sama berlaku ketika Anda menjalankan skrip shell dari file.
Kontras .bash_profiledan .profileyang hanya berjalan di awal shell login baru. ( bash -l) Anda memilih apakah perintah masuk .bashrcvs .bash_profiletergantung pada apakah Anda ingin dijalankan sekali atau untuk setiap shell interaktif mulai.
Sebagai contoh berlawanan dengan alias, yang saya pilih untuk dimasukkan .bashrc, Anda ingin melakukan PATHpenyesuaian .bash_profile, karena perubahan ini biasanya tidak idempoten :
export PATH="$PATH:/some/addition"
Jika Anda memasukkannya .bashrcsebagai gantinya, setiap kali Anda meluncurkan sub-shell interaktif, :/some/additionakan ditempelkan ke akhir PATHlagi, menciptakan kerja ekstra untuk shell ketika Anda salah ketik perintah.
Anda mendapatkan shell Bash interaktif baru setiap kali Anda keluarvi dengan :sh, misalnya.
Minor quibble: tidak seperti kebanyakan shell lainnya, bash tidak secara otomatis memuat file konfigurasi per-instance .bashrcketika dimulai sebagai shell login. Ini terkadang dapat menyebabkan perilaku yang tidak terduga . Solusi yang biasa digunakan adalah sumber .bashrcdari .profileatau .bash_profilesebagai gantinya.
Ilmari Karonen
@IlmariKaronen Karena .bashrctidak dimaksudkan untuk digunakan oleh shell lain, lebih baik untuk tidak mengambilnya .profile(yang mungkin digunakan oleh non- bashshell lain).
chepner
@IlmariKaronen apa yang terjadi (baca: bagaimana saya bisa men-debug mengapa) saat source ~/.bashrcatau . ~/.bashrcatau [[ -f ~/.bashrc ]] && source. ~/.bashrcatau [ -f ~/.bashrc ] && source ~/.bashrctidak bekerja?
@ WarrenYoung Saya akan tetapi saya menyadari bahwa .bashrcmemang bersumber (menggunakan perintah yang direkomendasikan dari superuser.com/a/183980/128768 ). Masalah yang saya hadapi sebenarnya tidak sourcing dari https://github.com/junegunn/fzfmelalui perintah ini di dalam .bashrc: source ~/.fzf.bash. Saya meluncurkan terminal baru, kemudian Ctrl+ Rdan saya dapatkan `__fzf_history__`bash: fzf: command not found. Saya sumber secara manual .bashrcdan pintasan tombol yang sama meluncurkan fzf seperti yang diharapkan. Permintaan maaf untuk kebisingan di sini.
Nikos Alexandris
20
Tujuan suatu .bashrcfile adalah untuk menyediakan tempat di mana Anda dapat mengatur variabel, fungsi dan alias, menentukan prompt (PS1) Anda dan menetapkan pengaturan lain yang ingin Anda gunakan setiap mulai membuka jendela terminal baru.
Ini bekerja dengan dijalankan setiap kali Anda membuka terminal, jendela atau panel baru.
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"
Penjelasan:
-1. Setel file riwayat saya untuk mengabaikan duplikat dan jauh lebih besar dari standar.
-2. Pilihan warna untuk lsbergantung pada apakah Anda menggunakan linux atau OSX
-3. Fungsi " md" untuk membuat dan cd ke direktori dengan satu perintah
-4. Temukan cabang git saat ini jika dalam git repo dan ...
-5. -9. Definisikan prompt PS1 yang luar biasa, seperti pada
-10. Peningkatan prompt PS2
-11. Tetapkan vi sebagai editor pada baris perintah
-12. Tetapkan vi sebagai editor default
-13. jalankan .bash_aliasesfile saya jika ada
-14. Jalankan skrip penyelesaian tab git saya (untuk remote dan cabang) jika ada.
-15. Jalankan autojump jika ada
-16. Izinkan cd'ing tanpa mengetikkan bagian cd jika versi bash> = 4
-17. Jalankan skrip penyelesaian bash jika ada
-18. Gunakan TMUX jika ada
-19. Tambahkan rvm ke PATH
-20 saya . Gunakan rvm jika ada.
Saya telah membuat portable ini sehingga bekerja pada sembarang mesin linux atau OSX saya tanpa penyesuaian - karenanya sejumlah tes untuk kehadiran dilakukan sebelum menggunakan fungsi-fungsi tertentu dan skrip lainnya.
Ini juga membuatnya lebih mudah untuk menggunakan seluruh file segera di mesin baru tanpa memiliki masalah yang mempengaruhi membuka jendela terminal baru.
Ini tidak benar-benar menambah nilai tambahan untuk pertanyaan lama. Juga, saya melihat bahwa Anda baru menggunakan Unix & Linux, cobalah untuk tidak memposting gambar teks, alih-alih lebih baik menggunakan pemformatan blok kode dan salin dari konsol Anda. Ini memungkinkan teks untuk dicari / disalin / etc. Dalam contoh Anda sebenarnya tidak ada perintah rumit atau apa pun yang baik untuk dicari, tetapi praktik yang baik untuk jawaban lainnya.
Centimane
1
Saya tidak yakin saya sepenuhnya memahami referensi Anda untuk 'pertanyaan lama'. Ini ada di daftar pertanyaan teratas, dan relevan dengan 60k tampilan. Saya pikir nilai tambah berasal dari format, yang bertentangan dengan dialog / dugaan seperti jawaban sebelumnya. tetapi formatnya sudah diedit juga. Saya akan mengingat komentar Anda tentang penggunaan blok kode, terima kasih.
Timothy LJ Stewart
2
Itu ada di bagian atas daftar pertanyaan 'aktif' karena Anda memposting jawaban. Pertanyaan ini awalnya ditanyakan pada tahun 2014, dan menerima jawaban. Jawaban yang diterima menyatakan tujuan .bashrcdan membedakan perbedaan antara .bashrcdan .bash_profileyang mencakup konten jawaban Anda. Jangan berkecil hati, Anda mengedepankan upaya jujur, tetapi cobalah untuk fokus pada menjawab pertanyaan dengan beberapa konten yang tidak tercakup oleh jawaban lain.
Jawaban:
.bashrc
adalah skrip shell yang dijalankan Bash setiap kali dijalankan secara interaktif. Ini menginisialisasi sesi shell interaktif. Anda bisa meletakkan perintah apa pun di file itu yang bisa Anda ketik di command prompt.Anda menempatkan perintah di sini untuk mengatur shell untuk digunakan di lingkungan khusus Anda, atau untuk menyesuaikan hal-hal sesuai preferensi Anda. Hal yang umum untuk dimasukkan
.bashrc
adalah alias yang Anda ingin selalu tersedia..bashrc
berjalan pada setiap peluncuran shell interaktif. Jika Anda mengatakan:dan kemudian tekan Ctrl-Dtiga kali,
.bashrc
akan berjalan tiga kali. Tetapi jika Anda mengatakan ini sebagai gantinya:maka
.bashrc
tidak akan berjalan sama sekali, karena-c
membuat panggilan Bash non-interaktif. Hal yang sama berlaku ketika Anda menjalankan skrip shell dari file.Kontras
.bash_profile
dan.profile
yang hanya berjalan di awal shell login baru. (bash -l
) Anda memilih apakah perintah masuk.bashrc
vs.bash_profile
tergantung pada apakah Anda ingin dijalankan sekali atau untuk setiap shell interaktif mulai.Sebagai contoh berlawanan dengan alias, yang saya pilih untuk dimasukkan
.bashrc
, Anda ingin melakukanPATH
penyesuaian.bash_profile
, karena perubahan ini biasanya tidak idempoten :Jika Anda memasukkannya
.bashrc
sebagai gantinya, setiap kali Anda meluncurkan sub-shell interaktif,:/some/addition
akan ditempelkan ke akhirPATH
lagi, menciptakan kerja ekstra untuk shell ketika Anda salah ketik perintah.Anda mendapatkan shell Bash interaktif baru setiap kali Anda keluar
vi
dengan:sh
, misalnya.sumber
.bashrc
ketika dimulai sebagai shell login. Ini terkadang dapat menyebabkan perilaku yang tidak terduga . Solusi yang biasa digunakan adalah sumber.bashrc
dari.profile
atau.bash_profile
sebagai gantinya..bashrc
tidak dimaksudkan untuk digunakan oleh shell lain, lebih baik untuk tidak mengambilnya.profile
(yang mungkin digunakan oleh non-bash
shell lain).source ~/.bashrc
atau. ~/.bashrc
atau[[ -f ~/.bashrc ]] && source. ~/.bashrc
atau[ -f ~/.bashrc ] && source ~/.bashrc
tidak bekerja?.bashrc
memang bersumber (menggunakan perintah yang direkomendasikan dari superuser.com/a/183980/128768 ). Masalah yang saya hadapi sebenarnya tidak sourcing darihttps://github.com/junegunn/fzf
melalui perintah ini di dalam.bashrc
:source ~/.fzf.bash
. Saya meluncurkan terminal baru, kemudianCtrl
+R
dan saya dapatkan`__fzf_history__`bash: fzf: command not found
. Saya sumber secara manual.bashrc
dan pintasan tombol yang sama meluncurkan fzf seperti yang diharapkan. Permintaan maaf untuk kebisingan di sini.Tujuan suatu
.bashrc
file adalah untuk menyediakan tempat di mana Anda dapat mengatur variabel, fungsi dan alias, menentukan prompt (PS1) Anda dan menetapkan pengaturan lain yang ingin Anda gunakan setiap mulai membuka jendela terminal baru.Ini bekerja dengan dijalankan setiap kali Anda membuka terminal, jendela atau panel baru.
Anda dapat melihat milik saya di sini (foto dengan penyorotan sintaks) :
Penjelasan:
-1. Setel file riwayat saya untuk mengabaikan duplikat dan jauh lebih besar dari standar.
-2. Pilihan warna untuk
ls
bergantung pada apakah Anda menggunakan linux atau OSX-3. Fungsi "
md
" untuk membuat dan cd ke direktori dengan satu perintah-4. Temukan cabang git saat ini jika dalam git repo dan ...
-5. -9. Definisikan prompt PS1 yang luar biasa, seperti pada
-10. Peningkatan prompt PS2
-11. Tetapkan vi sebagai editor pada baris perintah
-12. Tetapkan vi sebagai editor default
-13. jalankan
.bash_aliases
file saya jika ada-14. Jalankan skrip penyelesaian tab git saya (untuk remote dan cabang) jika ada.
-15. Jalankan autojump jika ada
-16. Izinkan cd'ing tanpa mengetikkan bagian cd jika versi bash> = 4
-17. Jalankan skrip penyelesaian bash jika ada
-18. Gunakan TMUX jika ada
-19. Tambahkan rvm ke PATH
-20 saya . Gunakan rvm jika ada.
Saya telah membuat portable ini sehingga bekerja pada sembarang mesin linux atau OSX saya tanpa penyesuaian - karenanya sejumlah tes untuk kehadiran dilakukan sebelum menggunakan fungsi-fungsi tertentu dan skrip lainnya.
Ini juga membuatnya lebih mudah untuk menggunakan seluruh file segera di mesin baru tanpa memiliki masalah yang mempengaruhi membuka jendela terminal baru.
sumber
Ini adalah
bash
file konfigurasi.Kerang interaktif (non-login), maka konfigurasi dibaca dari file-file ini:
$HOME/.bashrc
Untuk shell Login, konfigurasi dibaca dari file-file ini:
/etc/profile
(Selalu bersumber)$HOME/.bash_profile
(sisa file-file ini diperiksa secara berurutan sampai ditemukan, maka tidak ada yang lain dibaca)$HOME/.bash_login
$HOME/.profile
Ilustrasi sederhana tentang bagaimana / kapan mereka dimuat adalah pada gambar di bawah ini.
Saya menambahkan
echo
ke.bashrc
dan.bash_profile
lihat
man bash
untuk informasi lebih lanjutsumber
.bashrc
dan membedakan perbedaan antara.bashrc
dan.bash_profile
yang mencakup konten jawaban Anda. Jangan berkecil hati, Anda mengedepankan upaya jujur, tetapi cobalah untuk fokus pada menjawab pertanyaan dengan beberapa konten yang tidak tercakup oleh jawaban lain.