Saya ingin ssh ke komputer remote Ubuntu, sumber saya .bashrc
dan jalankan perintah yang tergantung pada parameter yang ditetapkan oleh itu .bashrc
. Semua itu dalam shell interaktif yang tidak menutup setelah perintah selesai.
Yang saya coba sampai sekarang adalah
ssh user@remote_computer -t 'bash -l -c "my_alias;bash"'
atau hanya
ssh user@remote_computer -t "my_alias;bash"
Ini berfungsi untuk perintah umum (seperti ls
misalnya) tetapi ketika saya mencoba menjalankan alias yang didefinisikan di dalam .bashrc
saya mendapatkan kesalahan:
bash: my_alias: command not found
Tetapi kemudian ketika saya menulisnya kembali secara manual dan menjalankannya, itu berhasil!
Jadi bagaimana saya bisa memastikan .bashrc
sumbernya sebelum perintah dipanggil?
Jawaban:
Masalahnya adalah Anda mencoba menjalankan alias di shell non-interaktif. Ketika Anda menjalankan
ssh user@computer command
,command
jalankan non-interaktif.Kerang non-interaktif tidak membaca alias (dari man bash):
Ini berfungsi jika Anda menjalankannya lagi secara manual karena
bash
perintah terakhir memulai shell interaktif sehingga alias Anda sekarang tersedia.Sebagai alternatif, Anda dapat meluncurkan shell interaktif (
bash -i
) alih-alih shell login sederhana (bash -l
) pada mesin jarak jauh untuk menjalankan alias Anda:Ini tampaknya pendekatan yang sangat rumit. Anda belum menjelaskan mengapa Anda harus melakukan ini, tetapi pertimbangkan alternatif berikut:
Mulai saja shell interaktif masuk normal pada mesin jarak jauh dan jalankan perintah secara manual:
Jika Anda selalu ingin alias dijalankan ketika Anda terhubung ke komputer ini, edit
~/.profile
(atau~/.bash_profile
, jika ada) komputer jarak jauh dan tambahkan baris ini di akhir:Karena
~/.profile
dibaca setiap kali shell login dimulai (jadi, setiap kali Anda terhubung melaluissh
, misalnya), yang akan menyebabkanmy_alias
dijalankan setiap kali Anda terhubung.Perhatikan bahwa secara default, shell login membaca
~/.profile
atau~/.bash_profile
mengabaikan~/.bashrc
. Beberapa distribusi (Debian dan turunannya dan Arch, misalnya) distribusi seperti Ubuntu memiliki sumber default~/.profile
atau~/.bash_profile
file~/.bashrc
yang berarti bahwa alias yang Anda tetapkan~/.bashrc
juga akan tersedia dalam shell login. Ini tidak benar untuk semua distribusi, jadi Anda mungkin harus mengedit~/.profile
secara manual untuk mendapatkan sumbernya~/.bashrc
. Perhatikan juga bahwa jika~/.bash_profile
ada,~/.profile
akan diabaikan oleh bash.sumber
~/.basyrc
secara otomatis dibaca oleh~./profile
, jadi alias apa pun yang didefinisikan~/.bashrc
juga akan tersedia untuk setiap pembacaan shell~/.profile
. Yang Anda benar-benar perlu lakukan untuk membuatnya bekerja adalah secara eksplisit memulai shell interaktif (-i
).Saya harus mengomentari bagian .bashrc saya yang mencegah alias agar tidak digunakan dan menambahkan perintah expand_aliases. Ini dikomentari
Dan ini ditambahkan
Kemudian perintah saya berhasil:
sumber