Bagaimana cara memuat ulang .bashrc tanpa keluar dan kembali?


Jawaban:


2638

Anda hanya perlu memasukkan perintah:

source ~/.bashrc

atau Anda dapat menggunakan versi perintah yang lebih pendek:

. ~/.bashrc

88
Ini tidak persis sama dengan masuk dan mundur. Katakanlah Anda memiliki baris berikut di .bashrc:, export PATH=$PATH:foodan kemudian Anda ubah menjadi export PATH=$PATH:bar. Jika Anda masuk dan keluar, hanya barakan berada di PATH, tetapi jika Anda melakukan apa yang Anda sarankan, keduanya foodan barakan berada di PATH. Apakah Anda tahu jalan keluarnya?
HighCommander4

7
@ HighCommander4 - cara yang sangat tidak memuaskan untuk melakukan apa yang Anda inginkan adalah melakukan "bash -l" namun ini sebenarnya membuat subkulit baru dan ketika Anda logout Anda akan kembali ke shell penutup di mana "foo" masih di PATH. Jika Anda hanya tertarik pada PATH, Anda bisa melakukan "unset PATH" dan merekonstruksi dari awal, tetapi mungkin lebih mudah / aman adalah melakukan "PATH = / bin: / usr / bin" sebelum sumber .bashrc Anda. Bagaimana variabel PATH dibangun pada login sebenarnya cukup kompleks, melibatkan input paling tidak dari login (lihat "login man") dan / etc / profile (lihat "man bash").
George Hawkins

2
@Alex Anda dapat mengotomatiskannya dengan menambahkan baris ~ / .bashrc ke ~ / .bash_profile, meskipun saya tidak tahu apakah ini praktik yang baik.
Vivek Gani

4
Saya juga merekomendasikan membuat alias (yang bisa Anda simpan di ~ / .bashrc atau ~ / .bash_aliases) yang membuka .bashrc, dan memuatnya kembali setelah editor keluar. Anda dapat melakukannya dengan menggabungkan dua perintah dalam sebuah alias, misalnya seperti begitu (jika vim adalah editor pilihan Anda, jika tidak swap keluar untuk sesuatu yang lain): alias editbashrc='vim ~/.bashrc; source ~/.bashrc'. Ini akan membuat pengeditan menjadi lebih lancar, karena Anda tidak perlu memikirkan pemuatan ulang, setelah melakukan pengeditan, jika menggunakan alias khusus.
Samuel Lampa

6
Ini hanya akan mempengaruhi terminal saat ini.
matepal297

284

Atau Anda bisa menggunakan:

exec bash

Ini melakukan hal yang sama, dan lebih mudah diingat (setidaknya untuk saya).

The execperintah sepenuhnya menggantikan proses shell dengan menjalankan tertentu baris perintah. Dalam contoh kami, ini menggantikan apa pun shell saat ini dengan contoh baru bash(dengan file konfigurasi yang diperbarui).


13
Bisakah Anda jelaskan perbedaan source .bashrcperintah dan exec bash?
muradin

18
@muradin, sourceadalah perintah shell built-in yang mengeksekusi konten file yang dilewatkan sebagai argumen, dalam shell saat ini . Jadi, dalam contoh Anda, ia mengeksekusi file .bashrc di shell saat ini. Dan execperintah mengganti shell dengan program yang diberikan, dalam contoh Anda, ia menggantikan shell Anda dengan bash (dengan file konfigurasi yang diperbarui)
WhoSayIn

3
Dalam keadaan hiper-spesifik saya, ini benar-benar mengguncang. Dockerfile saya menjalankan skrip instal yang memodifikasi .bashrc. Saya kemudian membutuhkan itu untuk memuat ulang, tetapi . ~/.bashrcakan mengeksekusi di dashbukan bash, jadi ada kesalahan karena shopthilang. sourcetidak ditemukan dari shell, sehingga solusinya juga keluar. Saya mencoba ini dan gambar buruh pelabuhan dibangun dengan lancar!
m59

9
Elegan, tetapi "melakukan hal yang sama" tidak sepenuhnya benar. source ~/.bashrcakan melindungi seluruh lingkungan shell Anda (meskipun kemungkinan dimodifikasi oleh sumber ~/.bashrc), sedangkan exec bashhanya akan mempertahankan variabel lingkungan shell Anda saat ini (setiap perubahan ad-hoc ke shell saat ini dalam hal variabel shell, fungsi, opsi hilang). Tergantung pada kebutuhan Anda, satu atau lebih pendekatan lain mungkin lebih disukai.
mklement0

12
@SEoF, ketika Anda mengatakan "bash inception" dan jika Anda berpikir apa yang saya pikir Anda pikirkan, saya harus mengatakan bahwa Anda salah. Berbeda dengan film, Anda tidak terus menjadi bash dari bash ketika Anda berulang kali melakukannya exec bash. The execperintah menggantikan shell dengan program ini, dalam kasus kami, bash. Jadi, selalu ada satu contoh bash yang ada di terminal.
John Red

121

Untuk melengkapi dan membedakan dua jawaban paling populer, . ~/.bashrcdan exec bash:

Kedua solusi memuat ulang secara efektif~/.bashrc , tetapi ada perbedaan:

  • . ~/.bashrcatau source ~/.bashrcakan melindungi shell Anda saat ini :

    • Kecuali untuk modifikasi yang reload ~/.bashrcke dalam shell saat ini ( sumber ) membuat, yang shell saat ini dan keadaan yang diawetkan , yang meliputi variabel lingkungan, variabel shell, pilihan shell, fungsi shell, dan sejarah perintah.
  • exec bash, atau, lebih kuat lagi, exec "$BASH"[1] , akan mengganti shell Anda saat ini dengan instance baru, dan karenanya hanya mempertahankan variabel lingkungan shell Anda saat ini (termasuk yang telah Anda tetapkan secara ad-hoc).

    • Dengan kata lain: Setiap perubahan ad-hoc ke shell saat ini dalam hal variabel shell, fungsi shell, opsi shell, sejarah perintah hilang.

Tergantung pada kebutuhan Anda, satu atau lebih pendekatan lain mungkin lebih disukai.


[1] exec bashsecara teori dapat mengeksekusi executable yang berbeda bash dari yang memulai shell saat ini, jika kebetulan ada di direktori yang terdaftar sebelumnya di $PATH. Karena variabel khusus $BASHselalu berisi path lengkap dari executable yang memulai shell saat ini, exec "$BASH"dijamin untuk menggunakan executable yang sama .
Sebuah catatan di "..."sekitar $BASH: kutip ganda memastikan bahwa nilai variabel digunakan apa adanya, tanpa interpretasi oleh Bash; jika nilainya tidak memiliki ruang yang disematkan atau karakter meta shell lainnya (yang tidak mungkin dalam kasus ini), Anda tidak benar-benar membutuhkan tanda kutip ganda, tetapi menggunakannya adalah kebiasaan yang baik untuk dibentuk.


Anda menjawab pertanyaan saya sebelum saya bisa menanyakannya. Ini bagus untuk diketahui; Saya sering mengatur CLASSPATH saya untuk satu sesi.
swinefish

Jadi, bahkan jika saya memanggil exec "$ BASH" akankah variabel yang set .bashrc ditemukan di shell yang saya buka berikutnya (menggunakan executable yang sama dengan sesi saya saat ini)?
nitinr708

3
@ nitinr708: Ya, exec $BASHakan sumber ~/.bashrc, jadi Anda akan melihat perubahannya ke lingkungan shell di sesi baru.
mklement0

@ Gaming32, saya menghargai gagasan tentang catatan kaki hyper-linked, tetapi itu tidak benar-benar bekerja (dan dalam jawaban sesingkat ini, itu tidak terlalu penting).
mklement0

44

Seseorang mengedit jawaban saya untuk menambahkan bahasa Inggris yang salah, tetapi di sini adalah yang asli, yang lebih rendah daripada jawaban yang diterima.

. .bashrc

25
Ini hanya akan berfungsi jika direktori Anda saat ini sebenarnya adalah direktori home Anda. Berikut ini akan berfungsi:. ~ / .bashrc
Brian Showalter

6
Apa yang membuat ini bekerja? Apa yang sebenarnya terjadi ketika saya melakukan ".bashrc"? Terima kasih!
Jed Daniels

54
. adalah pintasan BASH untuk perintah builtin "source". Jadi ".bashrc" sama dengan "sumber .bashrc" ke penerjemah BASH.
Brian Showalter

7
Keren. Terima kasih. Sekarang saya tidak tahu.
Jed Daniels

2
Saya baru saja mengirim permintaan edit untuk ditambahkan ~/, tetapi karena jawaban teratas menunjukkan keduanya source ~/.bashrcdan . ~/.bashrcsaya ingin tahu apakah jawaban ini hanya akan dihapus sebagai berlebihan.
Max Ghenis

18

Tergantung pada lingkungan Anda, ketikkan saja

bash

mungkin juga berfungsi.


15
Namun, ini akan memanggil shell baru di dalam shell saat ini, sehingga menghabiskan sumber daya. Lebih baik gunakan solusi exec @ WhoSayln yang menggantikan shell saat ini dengan yang baru dipanggil.
Bernhard Wagner

ya gunakan saja sumbernya. Ini sama sekali tidak perlu dan menyebalkan.
dylnmc

Selain komentar @ BernhardWagner, Anda juga kehilangan riwayat bash Anda saat ini jika menelurkan shell baru
peterchaula

Ini adalah solusi yang baik dimana akses privilege pengguna terbatas.
Tunde Pizzle

menjalankan subproses menambah lapisan kompleksitas yang tidak memiliki nilai tambahan.
Alan Berezin

18

Dengan ini, Anda bahkan tidak perlu mengetikkan "source ~ / .bashrc":

Sertakan file bashrc Anda:

alias rc="vim ~/.bashrc && source ~/.bashrc"

Setiap kali Anda ingin mengedit bashrc Anda, jalankan saja alias " rc "


15
. ~/.bashrc

. adalah builtin yang diamanatkan POSIX


Alternatif

source ~/.bashrc

sourceadalah sinonim untuk titik / titik .dalam bash, tetapi tidak dalam POSIX sh, jadi untuk kompatibilitas maksimum, gunakan periode tersebut.

exec bash
  • execperintah menggantikan shell dengan program yang diberikan ... - WhoSayIn

2
exec bashmasih mewarisi lingkungan shell saat ini. exec env -i bashakan lebih dekat (atau exec env -i bash -ljika Anda saat ini dalam shell login).
chepner

5

Bergantung pada lingkungan Anda, Anda mungkin ingin menambahkan skrip agar .bashrc memuat secara otomatis saat Anda membuka sesi SSH. Saya baru-baru ini melakukan migrasi ke server yang menjalankan Ubuntu, dan di sana, profil., Tidak. Bashrc atau. Bash_profile dimuat secara default. Untuk menjalankan skrip apa pun di .bashrc, saya harus menjalankan source ~/.bashrcsetiap kali sesi dibuka, yang tidak membantu ketika menjalankan penyebaran jarak jauh.

Agar bashrc Anda memuat secara otomatis saat membuka sesi, coba tambahkan ini ke .profile:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Buka kembali sesi Anda, dan itu akan memuat semua jalur / skrip yang Anda miliki di .bashrc.


Saya memiliki ini di "profil" tetapi tidak berfungsi - setiap kali saya keluar, saya harus melakukannya dengan tangan. Ada saran?
Wayne Smallman

4

Saya menggunakan easyengine untuk mengatur server berbasis cloud vultr saya.
Saya menemukan file bash saya di /etc/bash.bashrc.

Begitu source /etc/bash.bashrcjuga trik untuk saya!

memperbarui

Saat mengatur server telanjang (ubuntu 16.04), Anda dapat menggunakan info di atas, ketika Anda belum menyiapkan nama pengguna, dan masuk melalui root.

Cara terbaik untuk membuat pengguna (dengan sudo privledges), dan login sebagai nama pengguna ini sebagai gantinya.
Ini akan membuat direktori untuk pengaturan Anda, termasuk file .profile dan .bashrc.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/

Sekarang, Anda akan mengedit dan (dan "sumber") ~/.bashrcfile tersebut.

Di server saya, ini terletak di /home/your_username/.bashrc
( di mana your_usernamesebenarnya nama pengguna baru yang Anda buat di atas, dan sekarang masuk dengan)


4

exec bash adalah cara yang bagus untuk mengeksekusi kembali dan meluncurkan shell baru untuk menggantikan yang sekarang. hanya untuk menambah jawabannya, $ SHELL mengembalikan shell saat ini yang merupakan bash. Dengan menggunakan berikut ini, itu akan memuat ulang shell saat ini, dan tidak hanya ke bash.

exec $SHELL -l;


3

Bagi saya yang berfungsi ketika saya mengubah PATH adalah: exec "$BASH" --login


Pertanyaannya adalah tentang memuat ulang ~/.bashrc, yang tidak--login akan (secara langsung) dimuat kembali; di tingkat pengguna, itu akan memuat ulang (atau atau ) sebagai gantinya. ~/.bash_profile~/.bash_login~/.profile
mklement0

3

Tipe:

source ~/.bashrc

atau, dalam bentuk yang lebih pendek:

. ~/.bashrc


1
Sekali lagi, hanya berfungsi jika Anda berada di direktori home, atau lebih tepatnya, di direktori di mana .bashrcberada. Cara yang lebih tepat untuk melakukan ini, sebagaimana diceritakan dalam jawaban yang diterima, adalah source ~/.bashrc.
John Red

2

saya menggunakan perintah berikut di msysgit

. ~/.bashrc

versi lebih pendek dari

source ~/.bashrc

@ jwg jawaban yang diterima adalah. .bashrc. hanya akan berfungsi jika Anda berada di direktori home di msysgit.
Sojan V Jose

@ jwg ok saya kurus saya menyebutkan bahwa Anda tidak perlu mengetikkan 'sumber ~ / .bashrc' sebagai gantinya gunakan versi yang lebih pendek.
Sojan V Jose

@ jwg oke saya menambahkannya sebagai edit ke jawaban asli :)
Sojan V Jose

Mengapa jawaban yang berlebihan @ Sojan?
nitinr708

@ nitinr708 2014. saya hampir tidak ingat: P. jawaban aslinya diedit kemudian sesuatu yang saya kira.
Sojan V Jose

2

Dengan asumsi shell interaktif, dan Anda ingin menyimpan riwayat perintah Anda saat ini dan juga memuat / etc / profile (yang memuat data lingkungan termasuk / etc / bashrc dan pada Mac OS X memuat jalur yang ditentukan di /etc/paths.d/ via path_helper), tambahkan riwayat perintah Anda dan lakukan exec bash dengan opsi login ('-l'):

history -a && exec bash -l

1

Ini juga akan berfungsi ..

cd ~
source .bashrc

7
Ya, tetapi juga mengubah direktori kerja ke ~, yang tidak diinginkan.
Albin

1
Terima kasih telah menjaga konteks agar tetap hidup @Krinkle
nitinr708

Apakah perlu menentukan ~untuk mengubah direktori kerja ke direktori home user?
Kenly

1

Saya perhatikan bahwa exec bashperintah murni akan menjaga variabel lingkungan, jadi Anda perlu menggunakan exec -c bashuntuk menjalankan bash di lingkungan kosong.

Misalnya, Anda masuk bash, dan export A=1, jika Anda exec bash, bash A == 1.

Jika Anda exec -cl bash, Akosong.

Saya pikir ini adalah cara terbaik untuk melakukan pekerjaan Anda.


-2

saya pribadi punya

alias ..='source ~/.bashrc'

di bashrc saya, sehingga saya bisa menggunakan ".." untuk memuatnya kembali.


4
Banyak orang menggunakan ..sebagai alias untuk cd .., jadi itu akan sangat membingungkan.
The Godfather

kecuali nama alias 'ide bagus. alias rehash='source ~/.bashrc'adalah pilihan saya.
Frank Nocke

gunakan sesuatu seperti "_rs" yang saya gunakan untuk reload shell. saya cukup banyak menggunakan _ untuk memulai alias saya; yang mirip dengan js libs underscorejs atau lodash.
Jimmy MG Lim
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.