.bashrc di ssh login

375

Ketika saya ssh ke ubuntu-box saya yang menjalankan Hardy 8.04, variabel lingkungan di saya .bashrctidak disetel.

Jika saya melakukan sumber .bashrc, variabel diatur dengan benar, dan semuanya baik-baik saja.

Kenapa .bashrctidak dijalankan saat login?

Hobhouse
sumber
92
Bagaimana mungkin "off topic" ini?
Jonah
8
Saya tidak ketat seperti ini, tetapi dugaan saya adalah ini milik serverfault.com, superuser.com, atau askubuntu.com
Michael Butler
16
@MichaelButler Setuju. Bertanya-tanya mengapa mereka tidak memindahkannya alih-alih hanya menutupnya ...
Luc
4
@Luc - Pertanyaan hanya bisa dipindahkan dalam 60 hari sejak dibuat. Pertanyaan ini tidak ditutup sebagai topik sampai 3 setengah tahun setelah itu dibuat. Saya percaya aturan 60 hari ada hubungannya dengan ketika database pertanyaan didukung atau sesuatu ... menjadi lebih sulit untuk bermigrasi setelah cadangan itu terjadi.
ArtOfWarfare
Saya pikir itu adalah pertanyaan yang sangat berguna. Mengalami masalah ini ketika saya harus ssh ke mesin A, untuk ssh ke mesin B (hanya dapat diakses melalui jaringan lokal A). Berikan saya perbedaan praktis antara .bashrcdan .bash_profile!
information_interchange

Jawaban:

621

.bashrctidak bersumber ketika Anda masuk menggunakan SSH. Anda perlu sumber di .bash_profileseperti ini:

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi
Ayman Hourieh
sumber
32
ini harus bekerja pada distro yang waras dengan Bash, jadi semua komentar ini sudah usang :)
1
Ini tidak diperlukan dengan server Ubuntu 12.04 LTS, karena .bashrcbersumber ketika Anda SSH masuk, secara default.
orokusaki
4
@orokusaki: Koreksi, ini :) Ada file .bash_profile yang nakal yang memaksa .profile dilewati.
Lester Peabody
4
Seperti @LesterPeabody, .bashrc saya tidak bersumber pada server Ubuntu 12.04 LTS karena .bash_profile yang nakal. Itu dibuat oleh instalasi RVM. Saya memindahkan perintah RVM ke .profile dan menghapus .bash_profile. Semua berjalan dengan baik sekarang.
Rod Daunoravicius
4
fwiw Debian Jessie / 8 sudah sumber .bashrcout-of-the-box - tetapi tidak dari .profile, bukan .bash_profile.
underscore_d
75

Saya memiliki situasi yang sama seperti Hobhouse. Saya ingin menggunakan perintah

 ssh myhost.com 'some_command'

dan 'some_command' ada di '/ var / some_location' jadi saya mencoba untuk menambahkan '/ var / some_location' di lingkungan PATH dengan mengedit '$ HOME / .bashrc'

tapi itu tidak berhasil. karena default .bashrc (Ubuntu 10.4 LTS) mencegah dari sumber dengan kode seperti di bawah ini

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

jadi Jika Anda ingin mengubah lingkungan untuk ssh shell non-login. Anda harus menambahkan kode di atas baris itu.

ruseel
sumber
7
Terima kasih sobat! Ini adalah bagian yang tidak berhasil untuk saya :)
Raymond Barlow
Dewd ujung dingin. Saya mengalami jebakan ini ketika menjalankan skrip dari jenkins. Saya sudah login melalui ssh dan berhasil. Jenkins login non-interaktif dan gagal.
Krzysztof Jabłoński
1
Mengapa solusi umum adalah bahkan tidak menetapkan jalur baru untuk kerang non-interaktif di luar saya. Harus ada sedikit di atas bahwa jika pernyataan, hanya karena alasan ini. Sepertinya hanya alias dan inisialisasi alat interaktif yang seharusnya berada di bawah garis itu ...
BenPen
2
Pada versi lain dari Ubuntu, cek interaktifnya terlihat seperti:bash # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac
Sylvain
Terima kasih, ini menyelesaikannya untuk saya. Seandainya saya melihat ini sekitar satu jam yang lalu!
Justin Lawrence
31

Untuk sumber yang bagus tentang cara kerja bash, apa dotfile melakukan apa, dan bagaimana Anda harus menggunakan / mengkonfigurasinya, baca ini:

lununath
sumber
Bagian kunci: "menyebabkannya membaca / etc / profile dan kemudian salah satu dari .bash_profile atau .bash_login or .profile."
Andy Hayden
29

Jika solusi ayman ini tidak berhasil, cobalah penamaan file Anda .profilebukan .bash_profile. Itu berhasil bagi saya.

Loïc Wolff
sumber
2
Luar biasa. Saya kehilangan 15 menit pada detail ini.
vmassuchetto
Ini melakukan trik pada Ubuntu 12.10
ThinkCode
1
saya pikir. profil memuat pada login GUI. .bash_profile untuk login terminal.
Razec Luar
Ini juga berfungsi untuk masuk SSH ke wadah buruh pelabuhan Debian Jessie (menggunakan wadah data saja untuk penyimpanan persisten) - TETAPI Anda mungkin juga ingin memeriksa / etc / passwd untuk memeriksa shell login Anda adalah / bin / bash & not / bin / sh -------> / bin / dash
Stuart Cardall
1
@RazecLuar .profileakan dieksekusi oleh shell login apa pun , terlepas dari apakah shell tersebut bermaksud memunculkan GUI. Komentar Anda benar-benar bertentangan dengan pertanyaan dan jawaban ini, yang dengan jelas menunjukkan bahwa .profiledipanggil pada SSHing in - metode yang jelas bukan GUI.
underscore_d