Biasanya kita dapat mencari ~/.bashrc
file menggunakan perintah ini
source ~/.bashrc
tetapi jika saya menulis ini dalam skrip shell dan menjalankannya, tidak ada yang terjadi. Mengapa?
Apakah ada cara untuk melakukan ini?
Skrip saya:
#!/bin/bash
chmod a+x ~/.bashrc
source ~/.bashrc
Juga mencoba .
(titik) alih-alih source
. Hasil yang sama
source ~/.bashrc
shell yang ingin Anda ubah lingkungannya. Anda tidak dapat mengubahnya dari proses lain. Mungkin (secara global) menambahkan alias ini bisa menjadi bagian dari proses pemasangan GUI Anda..bashrc
Biasanya Anda mulai:Karena skrip Anda tidak memiliki set PS1 (karena itu tidak interaktif), skrip tidak me-reset path karena keluar lebih awal. Untuk menunjukkan, modifikasi skrip Anda:
ini sekarang akan memungkinkan skrip Anda untuk bekerja dengan yang baru
.bashrc
. Catatan: setelah skrip Anda keluar, env akan diatur sesuai dengan sebelum memulai skrip. Perubahan akan tercermin pada saat terminal dimulai berikutnya.sumber
.bashrc
menggunakan cara yang lebih andal untuk memeriksa apakah shell itu interaktif./etc/bash.bashrc
masih memiliki tes PS1.Mencoba:
Ini harus memuat ulang ~ / .bashrc, ~ / .bash_aliases, dll.
sumber
source
tetapi menghancurkan variabel apa pun dan sedemikian rupa sehingga pengguna telah mengatur secara manual - yang mungkin atau mungkin tidak apa yang Anda inginkan.exec bash
, cara saya memahaminya setelah akan tetap dalam pengaturan bash yang sama seperti sebelumnya?Saya ingin melengkapi jawaban ravi :
Perilaku ini khusus untuk Ubuntu (dan mungkin sebagian besar distro), karena
~/.bashrc
file default Anda dimulai dengan korsleting, Ubuntu 18.04, misalnya:Itu akan menghentikan evaluasi file jika berjalan di shell non-interaktif, yang merupakan kasus skrip Anda karena semua skrip dijalankan di shell non-interaktif , dan selanjutnya setiap file yang Anda
source
warisi akan mewarisi properti ini.eval
retasSaya menemukan peretasan jelek untuk menyelesaikan Ubuntu secara khusus, menggunakan
eval
bukannyasource
:Itu hanya melompati beberapa baris pertama dan mengevaluasi sisanya
~/.bashrc
sehingga sisanya dievaluasi dan memodifikasi eksekusi saat ini.Ketahuilah bahwa ini adalah angka ajaib dan mungkin tidak berfungsi di seluruh versi Ubuntu; tetapi mungkin solusi yang bagus jika Anda membuat skrip untuk sistem yang lebih atau kurang dikenal.
Solusi yang lebih bagus mungkin melibatkan penggunaan regex untuk menargetkan bit spesifik yang menghentikan evaluasi.
Alternatif Shebang
Alternatif lain yang mungkin bekerja lebih baik dalam beberapa skenario adalah memaksa skrip untuk berjalan di shell interaktif dengan menambahkan bendera di shebang :
Waspadai beberapa hal:
#!/usr/bin/env bash
formulir tetapi dengan cara ini Anda tidak dapat memulai shell dengan argumen .-i
rangkaian konsekuensinya sendiri, di antaranya, program akan meminta interaksi pengguna dan ini biasanya tidak dimaksudkan untuk skrip, misalnya, menginstaldeb
paket mungkin menghentikan skrip saatdpkg configure
diminta .set -i
danset +i
mematikan fitur di tempat saya membutuhkannya, tetapi ini tidak berhasil .sumber
Tidak ada metode lain yang bekerja untuk saya [
source /path/to/file
vs. ./path/to/file
, alias, dll ...], sampai, terima kasih untuk tutorial ini saya menemukan bahwa menggunakan:#!/usr/bin/env bash
peristiwaalih-alih yang lebih sederhana,
#!/usr/bin/env
argumen dapat diteruskan ke juru bahasa, yang menurut saya kuncinya di sini - lihat dokumen ini untuk info lebih lanjut.Bagaimanapun, jika perintah sumber dalam bentuk apa pun tidak berfungsi untuk Anda, coba periksa shebang Anda, itu mungkin masalahnya :)
sumber