file dot tidak bersumber saat menjalankan perintah melalui ssh

11

Ketika saya menjalankan program saya secara interaktif, ia bekerja dengan baik:

ssh somehost
$ ~/some/path/somescript.py

Ketika saya menjalankan program saya melalui ssh secara langsung, itu tidak berhasil. Variabel PYTHONPATHtidak disetel, karena .bashrctidak bersumber.

ssh somehost ~/some/path/somescript.py

Jika saya lari ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py', itu berfungsi dengan baik.

Tetapi yang terakhir tidak akan bekerja untuk beberapa orang lain, misalnya menggunakan tcsh dan tidak memiliki ~/.bashrcsama sekali).

Apa yang perintah untuk menjalankan hal melalui ssh pada host lain yang bekerja untuk semua kerang?

bzdjamboo
sumber
1
Dijawab di sini, stackoverflow.com/questions/820517/bashrc-at-ssh-login , pada dasarnya, ssh tidak sumber .bashrc, Anda perlu sumber .bashrc melalui .bash_profile atau opsi lainnya.
EightBitTony
1
@EightBitTony: Tidak, itu masalah yang berbeda. Pertanyaan bzdjamboo adalah tentang sesi non-interaktif.
Gilles 'SO- berhenti menjadi jahat'
Sebenarnya jawaban terakhir di tautan yang saya posting tampaknya berharga, ssh memang sumber .bashrc, tetapi tidak dieksekusi karena cek untuk interaktif. Namun saya menghargai, bahwa jawaban Anda mencakup semua pangkalan.
EightBitTony
3
@EightBitTony: Pada pertanyaan itu, jawaban yang diterima adalah solusi yang bagus untuk penanya tetapi jawabannya tidak menceritakan kisah lengkapnya. SSH sendiri tidak sumber apa pun. Jika shell login Anda dipanggil sebagai bash bash, maka itu sumber .bash_profileatau .profileuntuk login interaktif, dan .bashrcuntuk login non-interaktif. Jika shell login Anda menggunakan bash shatau ash atau ksh, shell .profileuntuk sumber login interaktif dan tidak ada untuk login non-interaktif.
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

12

Tidak ada file standar per pengguna yang dijalankan untuk login non-interaktif. Anda perlu membuat program mandiri, sehingga dapat menemukan dependensinya tanpa bergantung pada variabel lingkungan non-default, atau mengatur lingkungan secara eksplisit, biasanya dengan

ssh somehost '. ~/.profile; exec ~/some/path/somescript.py'

Anda tidak boleh mengatur variabel lingkungan di .bashrc: file ini dimaksudkan untuk shell interaktif, dan dibaca di setiap instance bash. Variabel lingkungan harus ditetapkan .profile, yang dibaca ketika Anda login. Terlepas dari sangat sedikit orang yang tidak menggunakan shell Bourne-style sebagai shell login mereka, .profiletidak bekerja untuk semua orang, apakah mereka menggunakan bash atau zsh atau csh atau ikan secara interaktif. Lihat juga Perbedaan antara .bashrc dan .bash_profile , File pengaturan mana yang harus digunakan untuk mengatur variabel lingkungan dengan bash? .

Yang sedang berkata, ada cara untuk sumber skrip setiap kali Anda login lebih dari ssh dengan kunci tertentu. Lihat Apakah ada cara untuk mendorong informasi konfigurasi shell ketika SSHing ke host? , sh file startup lewat ssh .

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Sekarang bagaimana saya menandainya "dijawab"? :-)
bzdjamboo
Di sepanjang sisi kiri bagian jawaban ini harus ada panah suara naik dan turun dan penghitung suara. Tepat di bawahnya harus ada garis besar kotak centang. Anda dapat mengkliknya untuk mengaktifkan fungsi terima jawab.
Caleb
Terima kasih sekali lagi, tetapi ternyata jawaban Anda tidak menyelesaikan masalah saya.
bzdjamboo
Berikut ini adalah rumusan masalah yang sedikit lebih baru dan pemahaman saya saat ini tentang akar masalahnya.
bzdjamboo
Tampaknya saya tidak dapat menambahkan lebih dari 60 karakter di sini sehingga saya harus mengajukan pertanyaan saya secara terpisah lagi. Maaf ab. bahwa. Sekali lagi, ini tidak diselesaikan, dan menggali lebih banyak selama beberapa hari tidak membantu.
bzdjamboo
0

Saya memiliki masalah yang sama, tetapi bagi saya solusinya berbeda. Pengguna saya tidak dikonfigurasikan untuk menggunakan bash sebagai shell, melainkan menggunakan zsh sebagai shell, oleh karena itu file bash dot tidak dijalankan saat login. Buka / etc / passwd dengan editor teks dan cari nama pengguna Anda dan shell apa yang digunakannya:

root:x:0:0:root:/root:/bin/zsh

Beginilah tampilan entri pengguna saya. Perhatikan ia mengatakan / bin / zsh bukan / bin / bash. Untuk zsh, file dot yang benar adalah ~ / .zprofile. Isinya akan dijalankan setiap kali Anda login menggunakan ssh.

Martin Hansen
sumber