Kami biasa menggunakan /etc/environment
untuk mengatur variabel lingkungan sistem-lebar pada Mountain Lion. Namun, sepertinya file ini tidak lagi dibaca.
Idealnya solusi harus berlaku untuk semua pengguna, dan kami membutuhkannya untuk bekerja dengan sesi konsol ssh. Jadi kita perlu ini berfungsi
ssh user@mavericks-machine 'echo $MY_ENV_VAR'
Sejauh ini kami sudah mencoba:
/etc/launchd.conf
Bekerja untuk semua pengguna, tetapi hanya berlaku untuk aplikasi 'berjendela', yaitu berfungsi di Terminal, tetapi tidak dalam sesi ssh.
~/.profile
,~/.bash_profile
dll.Hanya berlaku untuk kerang
Ada saran?
terminal
bash
environment-variables
joerick
sumber
sumber
/etc/environment
) tidak dibaca karena ini bukan standar lintas sistem - ini hanya bagian dari fasilitas Linux PAM. Mac OS X bukan Linux dan tidak menggunakan PAM, juga sistem operasi saya tidak sepengetahuan saya. Anda hanya lolos begitu saja karena Anda menggunakan Linux, rupanya. Dan ya, masih dibaca - oleh Linux ;-)Jawaban:
File yang benar, sebelum Mavericks, adalah
~/.MacOSX/environment.plist
. Ini tidak lagi didukung.Di Darwin, dan karenanya di Mac OS X, tempat yang tepat untuk mengatur ini adalah
/etc/launchd.conf
untuk diterapkan pada semua proses; jika berkaitan dengan shell pengguna secara khusus, gunakan file shell yang sesuai sebagai gantinya, tergantung pada shell yang dimaksud. Lihatlaunchd.conf
danlaunchctl
halaman manual untuk lebih.Yang mengatakan ...
Jika tujuan Anda secara khusus untuk melihat ini diterapkan untuk sesi ssh maka Anda perlu menyadari bahwa ssh, karena alasan keamanan, tidak menerapkan variabel lingkungan dengan cara ini. Faktanya, sesi ssh biasanya menerima serangkaian variabel lingkungan yang jauh lebih ketat dari OS karena bukan apa yang dikenal sebagai shell "login" atau "interaktif", itu diklasifikasikan sebagai shell "non-interaktif". (Lihat
man bash
lebih lanjut tentang tipe shell.) Cara ssh menangani variabel lingkungan tercakup dengan baik di ssh / sshd docs dan halaman manual.Untuk ssh - yang merupakan cangkangnya sendiri, mirip dengan bash - variabel lingkungan untuk sesi disimpan
~/.ssh/environment
sebagai setara dengan per pengguna untuk pengaturan ini untuk bash atau csh, dll dalam file peluncuran yang relevan. Ini mungkin di mana Anda ingin mengatur variabel ENV Anda untuk sesi ssh pengguna Anda, meskipun Anda tidak merinci mengapa Anda ingin menetapkan ENV secara global di pos asli Anda, yang akan sangat membantu dalam memberikan solusi. Saya sarankan Anda mengaturnya secara eksplisit berdasarkan pengguna per pengguna untuk menjaga keamanan yang tepat berdasarkan masing-masing akun masing-masing mengikuti praktik terbaik hak istimewa / atribut.Jika karena alasan tertentu Anda ingin mengabaikan implikasi keamanan ini, maka atur
PermitUserEnvironment
konfigurasi ssh Anda. Perhatikan bahwa ini dinonaktifkan jikaUseLogin
diaktifkan. PENTING: Sadarilah bahwa ini berarti akun pengguna ditetapkan untuk digunakan/bin/false
sebagai shell mereka - metode khas untuk menonaktifkan akun pengguna - sekarang dapat berpotensi mengatasi pembatasan ini dan sekarang dapat menjadi aktif, yang berbahaya. Banyak akun ditetapkan untuk digunakan/bin/false
sebagai shell mereka sebagai harapan keamanan.Intinya adalah Anda tidak boleh melakukan ini secara global dan mengharapkan ssh untuk menyebarkan ENV untuk alasan keamanan. Pertanyaan Anda adalah, secara efektif, secara sengaja menanyakan bagaimana cara mengalahkan beberapa mekanisme yang ada untuk alasan keamanan.
sumber
/etc/launchd.conf
tidak lagi berfungsi pada OSX 10.10 Yosemite.Jika Anda menggunakan
bash
, maka pengaturan variabel lingkungan/etc/profile
akan berlaku untuk semua pengguna.Dari
bash
manual pada OS X Mavericks , dengan penekanan saya (ini tidak berubah dari versi sebelumnya):sumber
Apa yang Anda (dan orang lain menemukan pertanyaan ini) hampir pasti mencari adalah jalur berikut:
Anda selalu dapat memasukkan suntingan ke dalam
/private/etc/paths.d
jika Anda ingin menghindari mengubah dokumen konfigurasi "jalur" default sistem utama, tetapi kemudian akan ditambahkan ke bagian akhir$PATH
variabel Anda , jadi jika Anda ingin menambahkan direktori di bagian depan$PATH
(untuk menimpa utilitas sistem default, misalnya), Anda hanya perlu mengedit/private/etc/paths
file utama itu sendiri dan menambahkannya ke bagian atas daftar. Sebagai contoh, saya melakukan ini untuk folder di mana saya menyimpan beberapa skrip yang saya buat sendiri, bersama dengan beberapa utilitas utama, sepertimozjpeg
, bahwa saya ingin sistem untuk selalu menggunakan daripada standar yang datang dengan itu (dengan cara itu semua file jpeg disimpan oleh hampir semua program secara otomatis dikompresi hingga 10% lebih dari utilitas sistem cjpeg biasa akan mengompres mereka - I ' Sudah membaca bahwa alasannya tidak default pada kebanyakan sistem adalah karena jauh lebih lambat, tetapi ketika Anda berbicara sekitar 0,14 detik dibandingkan dengan 0,02 detik, "lebih lambat oleh faktor 7" tidak terlalu berarti. apa pun ... dengan asumsi ini bukan server, tentu saja). Saya tahu banyak orang mungkin akan memperingatkan tentang "bahaya" potensial melakukan pengeditan ini secara mendalam di sistem, tetapi saya akan mengatakan bahwa jika Anda mencari jawaban seperti ini, Anda mungkin cukup tahu untuk berurusan dengan penamaan utilitas apa pun konflik yang berpotensi timbul di masa depan,/private/etc/paths
benar-benar menyebarkannya ke semua pengguna / login / instance yang mungkin - semua program, shell, dll akan menggunakan path dalam file itu untuk membangun basis$PATH
variabel mereka .Sejujurnya, saya cukup terkejut tidak ada orang lain di sini yang menyebutkan ini. Semua yang dipusingkan dengan launchd dan gangguan tentang penggunaan spesifik SSH ... ini adalah solusi yang dicari siapa pun untuk masalah mendasar ini - solusi bersih, langsung ke sumber, selalu berfungsi.
Ngomong-ngomong, jika Anda bertanya-tanya, pada OS X
/etc
hanyalah sebuah symlink/private/etc
, sehingga Anda bisa dengan mudah melakukannyasudo nano /etc/paths
dan sampai ke tempat yang sama persis. Path di atas hanyalah path lengkap sebenarnya dari file.sumber
$PATH
. OP tampaknya mencari solusi generik - pengaturan setiap env var, seluruh sistem, misalnya$EDITOR
, dllsudo
perintah, di macOS Sierra, saya mendapat izin ditolak jika saya mencoba membuat, menggunakanecho
file baru dalam/private/etc/paths.d
berisi tambahan ke path. Tapi itu berfungsi untuk pertama-tama membuat file, lalu gunakansudo mv
untuk memindahkan file/private/etc/paths.d
.~/.zshrc
... pelakunya memang/private/etc/paths
dan saya harus memperbarui file ini. Terima kasih.Saya memiliki masalah yang sama, khususnya
~/.bashrc
tidak bersumber ketika saya terhubung ke mesin saya melalui SSH. Saya menemukan bahwa mengubah pengaturan konfigurasi untuk SSHd berhasil. Mungkin masalah Anda juga terletak pada daemon SSH?Ubah file konfigurasi layanan SSH sebagai berikut:
Kemudian restart layanan Remote Login di System Preferences> Sharing.
Dari halaman
sshd_config
manual:(Jika itu membantu, saya telah menulis bagaimana saya menguji ini di wiki pribadi saya )
sumber
Jika orang lain mencari cara mengatur variabel lingkungan untuk proses dimulai dari sesi login grafis normal, Anda dapat menggunakan
/etc/launchd.conf
. Misalnya, tambahkan/usr/local/bin
ke jalur default, jalankandan mulai kembali untuk menerapkan perubahan. Cara lain untuk menerapkan perubahan adalah menjalankan
launchctl</etc/launchd.conf;sudo launchctl</etc/launchd.conf
dan meluncurkan kembali proses.sumber
/etc/launchd.conf
tidak lagi didukung sejak OSX 10.10 YosemiteHmm ... Pada Mac OS X 10.10.5 dan mungkin sebelumnya,
man -s5 launchd.conf
memberitahu kami: "launchd.conf is no longer respected by the system.
" Saya memiliki terlalu banyak hal yang terjadi sekarang untuk meletakkan variabel dummy dalam file dan restart untuk melihat apakah itu benar-benar berfungsi atau tidak setelah semua, tetapi dokumentasi mengatakan itu seharusnya tidak berfungsi.Saya cukup yakin itu tidak akan terjadi. Lakukan
man launchctl
dan Anda akan melihat: "The /etc/launchd.conf file is no longer consulted for subcommands to run during early boot time; this functionality was removed for security considerations.
"Apa yang dapat Anda lakukan adalah memasukkan semua variabel lingkungan yang Anda inginkan menjadi global-ish ke dalam beberapa file, mungkin disebut
environment
sesuai dengan Linux, atau (jika Apple memutuskan untuk melakukan sesuatu dengan itu nanti - Anda tidak pernah tahu)environment.conf
, seperti yang saya lakukan, lalu sumber ini melalui/etc/profile
:atau, jika Anda lebih suka format ringkas:
Jika Anda menggunakan beberapa shell selain bash, dan ia menggunakan sintaks pengaturan variabel yang sama dengan bash (seperti halnya zsh, saya pikir), Anda juga perlu mencari file ini dari file rc seluruh sistem shell itu (misal
/etc/zshrc
). Jika Anda menggunakan shell yang menggunakan sintaks yang berbeda, misalnya tcsh, Anda harus memelihara file yang sama untuk shell itu dan mengambilnya dari file rc seluruh sistem shell (mis./etc/csh.cshrc
Untuk tcsh), atau lebih baik lagi membuat skrip yang secara otomatis menghasilkannya, jadi Anda hanya perlu mengedit satu file untuk menambah / mengubah variabel. Ini bukan tempat untuk tutorial semacam itu; beberapa detik di Google muncul cara mengubah [t] variabel csh ekspor ke sintaks bash, di https://stackoverflow.com/questions/2710790/how-to-source-a-csh-script-in-bash-to -set-the-enviroment, jadi mungkin ada sesuatu yang tersedia untuk pergi ke arah lain.Sudah pengalaman saya bahwa Mac OS X bergerak semakin jauh dari perilaku file rc yang dapat diprediksi. Setidaknya 10.8, tampaknya tidak lagi memuat
/etc/rc.common
,/etc/rc.conf
atau/etc/rc.<anything>
, atau (karena setidaknya 10.9) akan memuat/etc/bash.bashrc
untuk shell nonlogin interaktif (yang tentunya harus dilakukan, sama seperti itu memuat~/.bashrc
untuk mereka, masih, pada 10,10) . Kemudian lagi saya memiliki Fink, MacPorts, dan Homebrew menginstal semua hal, jadi mungkin salah satunya mengganggu perilaku dotfile default. YMMV.sumber