.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?


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

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.


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:


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.