Jika saya melakukan perubahan .bashrc
, bagaimana cara memuat ulang tanpa keluar dan kembali?
1645
Anda hanya perlu memasukkan perintah:
source ~/.bashrc
atau Anda dapat menggunakan versi perintah yang lebih pendek:
. ~/.bashrc
export PATH=$PATH:foo
dan kemudian Anda ubah menjadiexport PATH=$PATH:bar
. Jika Anda masuk dan keluar, hanyabar
akan berada di PATH, tetapi jika Anda melakukan apa yang Anda sarankan, keduanyafoo
danbar
akan berada di PATH. Apakah Anda tahu jalan keluarnya?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.Atau Anda bisa menggunakan:
Ini melakukan hal yang sama, dan lebih mudah diingat (setidaknya untuk saya).
The
exec
perintah sepenuhnya menggantikan proses shell dengan menjalankan tertentu baris perintah. Dalam contoh kami, ini menggantikan apa pun shell saat ini dengan contoh barubash
(dengan file konfigurasi yang diperbarui).sumber
source .bashrc
perintah danexec bash
?source
adalah 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. Danexec
perintah mengganti shell dengan program yang diberikan, dalam contoh Anda, ia menggantikan shell Anda dengan bash (dengan file konfigurasi yang diperbarui). ~/.bashrc
akan mengeksekusi didash
bukanbash
, jadi ada kesalahan karenashopt
hilang.source
tidak ditemukan dari shell, sehingga solusinya juga keluar. Saya mencoba ini dan gambar buruh pelabuhan dibangun dengan lancar!source ~/.bashrc
akan melindungi seluruh lingkungan shell Anda (meskipun kemungkinan dimodifikasi oleh sumber~/.bashrc
), sedangkanexec bash
hanya 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.exec bash
. Theexec
perintah menggantikan shell dengan program ini, dalam kasus kami, bash. Jadi, selalu ada satu contoh bash yang ada di terminal.Untuk melengkapi dan membedakan dua jawaban paling populer,
. ~/.bashrc
danexec bash
:Kedua solusi memuat ulang secara efektif
~/.bashrc
, tetapi ada perbedaan:. ~/.bashrc
atausource ~/.bashrc
akan melindungi shell Anda saat ini :~/.bashrc
ke 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).Tergantung pada kebutuhan Anda, satu atau lebih pendekatan lain mungkin lebih disukai.
[1]
exec bash
secara teori dapat mengeksekusi executable yang berbedabash
dari yang memulai shell saat ini, jika kebetulan ada di direktori yang terdaftar sebelumnya di$PATH
. Karena variabel khusus$BASH
selalu 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.sumber
exec $BASH
akan sumber~/.bashrc
, jadi Anda akan melihat perubahannya ke lingkungan shell di sesi baru.Seseorang mengedit jawaban saya untuk menambahkan bahasa Inggris yang salah, tetapi di sini adalah yang asli, yang lebih rendah daripada jawaban yang diterima.
sumber
~/
, tetapi karena jawaban teratas menunjukkan keduanyasource ~/.bashrc
dan. ~/.bashrc
saya ingin tahu apakah jawaban ini hanya akan dihapus sebagai berlebihan.Tergantung pada lingkungan Anda, ketikkan saja
mungkin juga berfungsi.
sumber
Dengan ini, Anda bahkan tidak perlu mengetikkan "source ~ / .bashrc":
Sertakan file bashrc Anda:
Setiap kali Anda ingin mengedit bashrc Anda, jalankan saja alias " rc "
sumber
Alternatif
sumber
exec bash
masih mewarisi lingkungan shell saat ini.exec env -i bash
akan lebih dekat (atauexec env -i bash -l
jika Anda saat ini dalam shell login).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 ~/.bashrc
setiap 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:
Buka kembali sesi Anda, dan itu akan memuat semua jalur / skrip yang Anda miliki di .bashrc.
sumber
Saya menggunakan easyengine untuk mengatur server berbasis cloud vultr saya.
Saya menemukan file bash saya di
/etc/bash.bashrc
.Begitu
source /etc/bash.bashrc
juga 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")
~/.bashrc
file tersebut.Di server saya, ini terletak di
/home/your_username/.bashrc
( di mana
your_username
sebenarnya nama pengguna baru yang Anda buat di atas, dan sekarang masuk dengan)sumber
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;
sumber
Bagi saya yang berfungsi ketika saya mengubah PATH adalah:
exec "$BASH" --login
sumber
~/.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
Tipe:
source ~/.bashrc
atau, dalam bentuk yang lebih pendek:
. ~/.bashrc
sumber
.bashrc
berada. Cara yang lebih tepat untuk melakukan ini, sebagaimana diceritakan dalam jawaban yang diterima, adalahsource ~/.bashrc
.saya menggunakan perintah berikut di msysgit
versi lebih pendek dari
sumber
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'):
sumber
Ini juga akan berfungsi ..
sumber
~
untuk mengubah direktori kerja ke direktori home user?Saya perhatikan bahwa
exec bash
perintah murni akan menjaga variabel lingkungan, jadi Anda perlu menggunakanexec -c bash
untuk menjalankan bash di lingkungan kosong.Misalnya, Anda masuk bash, dan
export A=1
, jika Andaexec bash
, bashA == 1
.Jika Anda
exec -cl bash
,A
kosong.Saya pikir ini adalah cara terbaik untuk melakukan pekerjaan Anda.
sumber
saya pribadi punya
alias ..='source ~/.bashrc'
di bashrc saya, sehingga saya bisa menggunakan ".." untuk memuatnya kembali.
sumber
..
sebagai alias untukcd ..
, jadi itu akan sangat membingungkan.alias rehash='source ~/.bashrc'
adalah pilihan saya.