Bisakah pesan yang mengganggu Sudo dihapus dari Mountain Lion 10.8.0?

11

Setelah peningkatan ke 10.8.0, setiap kali saya melakukan sudo, saya selalu menerima pesan ini:

dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid

Saya sudah memeriksa .bash_profile, .zshrcsemua yang bisa saya pikirkan, dan saya tidak melihat apapun yang berhubungan dengan DYLD_lingkungan.

Setelah googling berjam-jam, saya mencoba untuk meletakkan dua baris ini di .zshrc:

unset LD_LIBRARY_PATH  
unset DYLD_LIBRARY_PATH

Namun pesan yang mengganggu tetap muncul.

Saya pergi ke akun tamu dan melakukan sudotetapi tidak mendapatkan pesan ini. Jadi saya kira saya memiliki beberapa perpustakaan khusus diinstal ... Tapi saya tidak tahu bagaimana cara men-debug ini.

BPm
sumber

Jawaban:

6

Apakah Anda memiliki variabel DYLD_ lainnya ditetapkan? Jalankan settanpa parameter untuk melihat semua variabel dan menghapus apa pun yang muncul dengan awalan itu.

Perhatikan bahwa sepertinya ini hanyalah solusi untuk bug, pesan-pesan itu tidak boleh dicetak kecuali Anda mengaktifkan DYLD_PRINT_WARNINGS.

Juga, pembaruan ke 10.8.1 tampaknya telah memperbaiki gangguan ini.

gabedwrds
sumber
1
Bug ML, sejauh yang saya tahu. Variabel DYLD_ itu bisa menjadi penting, menghapusnya mungkin merusak apa pun yang ditetapkan untuk mereka.
gabedwrds
2
Nah, bugnya adalah Anda tidak seharusnya melihat pesan-pesan itu kecuali Anda menyetel variabel lingkungan DYLD_PRINT_WARNINGS, tetapi karena suatu alasan Mountain Lion mencetaknya.
gabedwrds
2
10.8.1 Tidak memperbaiki masalah
Matteo
2
Membatalkan semua variabel lingkungan DYLD_ bukan solusi karena ada karena suatu alasan. Ini adalah bug dan kami terjebak dengannya sampai Apple memperbaikinya.
Matteo
2
Saya memiliki masalah ini pada 10.8.3
Alex Szatmary
3

Dalam zsh:

 sudo () { ( unset LD_LIBRARY_PATH DYLD_LIBRARY_PATH; exec command sudo $* ) }

Ini menghasilkan sub-shell di mana variabel lingkungan yang dikeluhkan sudo tidak disetel, dan kemudian mengeksekusi sudo.

Keuntungan dari beberapa jawaban lain termasuk:

  • Tidak menghapus LD_LIBRARY_PATH dan DYLD_LIBRARY_PATH dari lingkungan shell interaktif Anda (untuk perintah non-sudo yang membutuhkannya).
  • Penggunaan subkulit memastikan bahwa jika Anda menyela sudo saat sedang berjalan (mis., Dengan Ctrl-C), LD_LIBRARY_PATH dan DYLD_LIBRARY_PATH Anda tidak akan berubah di shell master Anda (tidak seperti skrip dalam jawaban lain yang mengatur dan menghapusnya dalam shell interaktif. ).
  • Penggunaan exec memastikan bahwa shell induk yang tidak perlu keluar segera ketika memanggil sudo, jadi tidak ada proses tambahan yang berkeliaran saat perintah dijalankan.

Saya akan meninggalkannya sebagai latihan bagi pembaca untuk port ke bash, et al.

Orang kiri Komunis
sumber
"Aku akan meninggalkannya sebagai latihan bagi pembaca untuk pindah ke bash, et al." Karena sebagian besar pengguna Apple menggunakan ZSH di atas Bash yang sudah diinstal sebelumnya (sarkasme).
Jonathan Dumaine
2

mengatasi ditemukan di forum dukungan apel oleh yokyoh1987,

https://discussions.apple.com/thread/4143805?start=30&tstart=0

di .profile / .bashrc / .bash_profile Anda (tergantung pada pengaturan terminal Anda):

# set DYLD_ * untuk program normal saya
DYLD_LIBRARY_PATH = '..'

# tetapkan sudo alternatif
thesudo ()
{
# buat cadangan variabel DYLD_ *
BACK lokal = $ DYLD_LIBRARY_PATH

# unset DYLD_ *
batalkan DYLD_LIBRARY_PATH

# memanggil sudo
/ usr / bin / sudo "$ @"

# restore DYLD_ * setelah sudo selesai
export DYLD_LIBRARY_PATH = $ BACK
}

# redirect sudo
alias sudo = thesudo
Brendon-Van-Heyzen
sumber
Itu adalah bagian kecil yang pintar dari manajemen lingkungan.
bmike
Satu masalah dengan solusi ini adalah bahwa jika Anda menyela sudo (misalnya, melalui ctrl-c) DYLD_LIBRARY_PATH Anda var akan diam-diam tidak disetel dalam shell interaktif Anda karena operasi pemulihan pada akhirnya tidak akan dieksekusi. Menggunakan subkulit (lihat jawaban saya yang lain untuk pertanyaan ini) menyelesaikan ini.
Pinko
-3

Anda mungkin mengatur LD_LIBRARY_PATH Anda.

pengguna37093
sumber
2
Saat poster itu menulis, dia sudah melakukannya unset LD_LIBRARY_PATH, dan masalahnya tetap ada.
myhd