Sepertinya saya tidak dapat menetapkan $ PATH baru sehingga digunakan saat menjalankan perintah melalui ssh user@host command
. Saya telah mencoba menambahkan export PATH=$PATH:$HOME/new_path
ke ~ / .bashrc dan ~ /. Profil pada mesin remote, tetapi mengeksekusi ssh user@host "echo \$PATH"
menunjukkan bahwa perubahan belum diambil (ini menunjukkan / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games). Mesin jarak jauh menjalankan Ubuntu 8.04.
Saya yakin saya bisa meretasnya ke / etc / profile, tapi itu bukan solusi bersih dan hanya berfungsi ketika seseorang memiliki akses root.
export PATH=$PATH:$HOME/new_path
ke ~ / .bash_login dan ~ / .bash_profile (sebagai tambahan pada ~ / .bashrc dan ~ / .profile) yang telah dicoba sebelumnya. Tidak ada yang berhasil. Dalam kedua kasus saya harus membuat file.Jawaban:
Seperti yang dikatakan grawity, ~ / .bashrc adalah yang Anda inginkan, karena bersumber dari shell non-login non-interaktif.
Saya perkirakan masalah yang Anda alami berkaitan dengan file default Ubuntu ~ / .bashrc. Biasanya dimulai dengan sesuatu seperti ini:
Anda ingin meletakkan apa pun untuk cangkang non-interaktif sebelum baris ini.
sumber
export PATH=$PATH:$HOME/new_path
atas garis itu dan berhasil. Terima kasih!.zshenv
untuk pengguna zsh, butuh waktu cukup lama untuk menemukannya di komentar pada jawaban lainAnda punya
~/.bash_login
atau tidak~/.bash_profile
?Bash dalam mode interaktif memeriksa file-file ini, dan menggunakan yang sudah ada , dalam urutan ini:
~/.bash_profile
~/.bash_login
~/.profile
Jadi, jika Anda memiliki
~/.bash_profile
, maka perubahan apa pun yang Anda lakukan~/.profile
akan dibiarkan tidak terlihat.Bash dalam mode non-interaktif kadang-kadang membaca file
~/.bashrc
(yang juga sering berasal dari skrip interaktif). Dengan "kadang-kadang" yang saya maksudkan adalah ketergantungan distribusi: anehnya, ada opsi waktu kompilasi untuk mengaktifkan ini . Debian memungkinkan~/.bashrc
pembacaan, sedangkan misalnya Arch tidak.ssh
tampaknya menggunakan mode non-interaktif,jadi~/.bashrc
sudah cukup. Ketika mengalami masalah seperti ini, saya biasanya menambahkan beberapa gema untuk melihat file apa yang sedang dijalankan.sumber
~/.bashrc
"? Saya tidak melihat pernyataan ini di halaman manual. Terima kasih~/.bashrc
, tampaknya Anda perlu mengatur variabel lingkungan tambahanBASH_ENV
; lihat superuser.com/a/585699/100843 . Untuk shell login non-interaktif, Anda mungkin harus memodifikasi salah satu dari tiga skrip startup yang Anda sebutkan..zshenv
.zshenv
selalu bersumber; tidak masalah apakah itu interaktif atau tidak.Dokumentasi ssh mengatakan:
itulah sebabnya menambahkan ke file bashrc tidak berfungsi. Namun Anda memiliki opsi berikut:
Jika
PermitUserEnvironment
opsi ini diatur dalam konfigurasi sshd, Anda dapat menambahkan pengaturan PATH Anda~/.ssh/environment
ssh remotemachine 'bash -l -c "somecommand"'
sumber
man sshd_config
mengatakan tidak aktif secara default sehingga tidak mungkin solusi ini akan bekerja untuk kebanyakan orang. 2. Ini akan berhasil, tetapi saya tidak dapat dengan mudah memodifikasi perintah yang dikirim ke ssh (lihat komentar kedua pada pertanyaan saya).Anda selalu bisa mengatakan:
sumber
Selain jawaban @signpolyma, Anda harus menambahkan ekspor Anda sebelum baris ini
sumber
Hanya memiliki masalah yang sama sendiri, menyelesaikannya dengan:
sumber