Jika saya melakukan perubahan .bashrc
, bagaimana cara memuat ulang tanpa keluar dan kembali?
Jika saya melakukan perubahan .bashrc
, bagaimana cara memuat ulang tanpa keluar dan kembali?
Jawaban:
Anda hanya perlu memasukkan perintah:
source ~/.bashrc
atau Anda dapat menggunakan versi perintah yang lebih pendek:
. ~/.bashrc
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:
exec bash
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 baru bash
(dengan file konfigurasi yang diperbarui).
source .bashrc
perintah dan exec 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. Dan exec
perintah mengganti shell dengan program yang diberikan, dalam contoh Anda, ia menggantikan shell Anda dengan bash (dengan file konfigurasi yang diperbarui)
. ~/.bashrc
akan mengeksekusi di dash
bukan bash
, jadi ada kesalahan karena shopt
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
), sedangkan exec 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
. The exec
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
dan exec bash
:
Kedua solusi memuat ulang secara efektif~/.bashrc
, tetapi ada perbedaan:
. ~/.bashrc
atau source ~/.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 berbeda bash
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.
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.
. .bashrc
~/
, tetapi karena jawaban teratas menunjukkan keduanya source ~/.bashrc
dan . ~/.bashrc
saya ingin tahu apakah jawaban ini hanya akan dihapus sebagai berlebihan.
Tergantung pada lingkungan Anda, ketikkan saja
bash
mungkin juga berfungsi.
. ~/.bashrc
source ~/.bashrc
exec bash
exec
perintah menggantikan shell dengan program yang diberikan ... - WhoSayIn
exec bash
masih mewarisi lingkungan shell saat ini. exec env -i bash
akan lebih dekat (atau exec 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:
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 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)
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;
Bagi saya yang berfungsi ketika saya mengubah PATH adalah: exec "$BASH" --login
~/.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
.bashrc
berada. Cara yang lebih tepat untuk melakukan ini, sebagaimana diceritakan dalam jawaban yang diterima, adalah source ~/.bashrc
.
saya menggunakan perintah berikut di msysgit
. ~/.bashrc
versi lebih pendek dari
source ~/.bashrc
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
Saya perhatikan bahwa exec bash
perintah murni akan menjaga variabel lingkungan, jadi Anda perlu menggunakan exec -c bash
untuk 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
, A
kosong.
Saya pikir ini adalah cara terbaik untuk melakukan pekerjaan Anda.
saya pribadi punya
alias ..='source ~/.bashrc'
di bashrc saya, sehingga saya bisa menggunakan ".." untuk memuatnya kembali.
..
sebagai alias untuk cd ..
, jadi itu akan sangat membingungkan.
alias rehash='source ~/.bashrc'
adalah pilihan saya.
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?