ข้อความที่น่ารำคาญของ sudo สามารถลบออกจาก Mountain Lion 10.8.0 ได้หรือไม่


11

หลังจากอัปเกรดเป็น 10.8.0 ทุกครั้งที่ฉันทำsudoฉันจะได้รับข้อความนี้เสมอ:

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

ผมได้ตรวจสอบของฉัน.bash_profile, .zshrcทั้งหมดที่ฉันสามารถคิดและผมไม่เห็นอะไรที่เกี่ยวข้องกับDYLD_สภาพแวดล้อม

หลังจาก googling หลายชั่วโมงฉันพยายามใส่สองบรรทัดนี้ใน.zshrc:

unset LD_LIBRARY_PATH  
unset DYLD_LIBRARY_PATH

แต่ข้อความที่น่ารำคาญยังคงปรากฏขึ้น

ฉันไปที่บัญชีผู้เยี่ยมชมและทำsudoแต่ไม่ได้รับข้อความนี้ ดังนั้นฉันเดาว่าฉันได้ติดตั้งไลบรารี่ที่กำหนดเองแล้ว ... แต่ฉันไม่รู้วิธีแก้จุดบกพร่องนี้

คำตอบ:


6

คุณมีตัวแปร DYLD_ อื่น ๆ ที่ตั้งไว้หรือไม่ เรียกใช้setโดยไม่มีพารามิเตอร์เพื่อดูตัวแปรทั้งหมดและล้างสิ่งใด ๆ ที่เกิดขึ้นกับส่วนนำหน้านั้น

โปรดทราบว่าดูเหมือนว่านี่เป็นเพียงวิธีการแก้ปัญหาข้อบกพร่องข้อความเหล่านั้นไม่ควรพิมพ์เว้นแต่คุณจะเปิดใช้งาน DYLD_PRINT_WARNINGS

นอกจากนี้การอัปเดตเป็น 10.8.1 ก็ดูเหมือนจะแก้ไขปัญหานี้แล้ว


1
ข้อผิดพลาด ML เท่าที่ฉันสามารถบอกได้ ตัวแปร DYLD_ เหล่านั้นมีความสำคัญการลบออกอาจทำลายสิ่งที่พวกเขาตั้งค่าไว้
gabedwrds

2
ข้อผิดพลาดคือคุณไม่ควรเห็นข้อความเหล่านั้นเว้นแต่ว่าคุณจะตั้งค่าตัวแปรสภาพแวดล้อม DYLD_PRINT_WARNINGS แต่ด้วยเหตุผลบางอย่าง Mountain Lion ก็พิมพ์ข้อความด้วยวิธีใดวิธีหนึ่ง
gabedwrds

2
10.8.1 ไม่ได้แก้ไขปัญหา
Matteo

2
การยกเลิกการตั้งค่าตัวแปรสภาพแวดล้อม DYLD_ ทั้งหมดไม่ใช่วิธีแก้ปัญหาเนื่องจากมีเหตุผล มันเป็นจุดบกพร่องและเราติดอยู่กับมันจนกว่า Apple จะแก้ไข
Matteo

2
ฉันมีปัญหานี้เมื่อวันที่ 10.8.3
อเล็กซ์ Szatmary

3

ใน zsh:

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

สิ่งนี้จะสร้าง sub-shell ที่ตัวแปรสภาพแวดล้อมที่ sudo บ่นเกี่ยวกับนั้นไม่ได้ถูกตั้งค่าและจากนั้นเรียกใช้ sudo

ข้อดีของคำตอบอื่น ๆ ได้แก่ :

  • ไม่ลบ LD_LIBRARY_PATH และ DYLD_LIBRARY_PATH จากสภาวะแวดล้อมเชลล์แบบโต้ตอบของคุณ (สำหรับคำสั่งที่ไม่ใช่ sudo ที่ต้องการ)
  • การใช้ subshell ช่วยให้มั่นใจได้ว่าถ้าคุณขัดจังหวะ sudo ในขณะที่ทำงาน (เช่นด้วย Ctrl-C), LD_LIBRARY_PATH และ DYLD_LIBRARY_PATH ของคุณจะไม่เปลี่ยนแปลงในเชลล์หลักของคุณ (ต่างจากสคริปต์ในคำตอบอื่นที่ตั้งค่าและยกเลิกในเชลล์ )
  • การใช้ exec ทำให้แน่ใจได้ว่าพาเรนต์เชลล์ที่ไม่จำเป็นนั้นจะออกจากทันทีเมื่อเรียกใช้ sudo ดังนั้นจึงไม่มีกระบวนการพิเศษที่แขวนอยู่รอบ ๆ ขณะที่คำสั่งรัน

ฉันจะปล่อยให้มันเป็นแบบฝึกหัดให้ผู้อ่านไปที่พอร์ตเพื่อทุบตีและอื่น ๆ


"ฉันจะปล่อยให้มันเป็นแบบฝึกหัดให้ผู้อ่านไปที่พอร์ตเพื่อทุบตี ฯลฯ " เนื่องจากผู้ใช้ Apple ส่วนใหญ่ใช้ ZSH บน Bash (การประชดประชัน) ที่ติดตั้งไว้ล่วงหน้า
Jonathan Dumaine

2

พบกับการแก้ไขในฟอรัมการสนับสนุน Apple โดย yokyoh1987,

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

ใน. profile / .bashrc / .bash_profile (ขึ้นอยู่กับการตั้งค่าเทอร์มินัลของคุณ):

# set DYLD_ * สำหรับโปรแกรมปกติของฉัน
DYLD_LIBRARY_PATH = '..'

# ตั้ง sudo อื่น
thesudo ()
{
# สำรองตัวแปร DYLD_ *
local BACK = $ DYLD_LIBRARY_PATH

# unset DYLD_ *
ยกเลิกการตั้งค่า DYLD_LIBRARY_PATH

# เรียก sudo
/ usr / bin / sudo "$ @"

# restore DYLD_ * หลังจาก sudo เสร็จสิ้น
ส่งออก DYLD_LIBRARY_PATH = $ BACK
}

# redirect sudo
alias sudo = thesudo

นั่นคือการจัดการ env ที่ฉลาดเล็กน้อย
bmike

ปัญหาหนึ่งของการแก้ปัญหานี้คือถ้าคุณขัดจังหวะ sudo (เช่นผ่าน ctrl-c) var DYLD_LIBRARY_PATH ของคุณจะไม่มีการตั้งค่าไว้ในเชลล์แบบโต้ตอบในทันทีเนื่องจากการดำเนินการคืนค่าในตอนท้ายจะไม่ได้ดำเนินการ ใช้ subshell (ดูคำตอบอื่น ๆ ของคำถามนี้) แก้ปัญหานี้
Pinko

-3

คุณอาจตั้งค่า LD_LIBRARY_PATH ของคุณ


2
ในขณะที่โปสเตอร์เขียนเขา / เธอมีอยู่แล้วunset LD_LIBRARY_PATHและปัญหายังคงมีอยู่
myhd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.