Tin nhắn gây phiền nhiễu của sudo có thể bị xóa khỏi Mountain Lion 10.8.0 không?


11

Sau khi nâng cấp lên 10.8.0, bất cứ khi nào tôi thực hiện sudo, tôi luôn nhận được thông báo này:

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

Tôi đã kiểm tra .bash_profile, .zshrctất cả những gì tôi có thể nghĩ ra và tôi không thấy bất cứ điều gì liên quan đến DYLD_môi trường.

Sau khi googling hàng giờ, tôi đã cố gắng đưa hai dòng này vào .zshrc:

unset LD_LIBRARY_PATH  
unset DYLD_LIBRARY_PATH

Nhưng tin nhắn phiền phức vẫn xuất hiện.

Tôi vào một tài khoản khách và đã làm sudonhưng không nhận được tin nhắn này. Vì vậy, tôi đoán rằng tôi đã cài đặt một số thư viện tùy chỉnh ... Nhưng tôi không biết cách gỡ lỗi này.

Câu trả lời:


6

Bạn có bất kỳ biến DYLD_ nào khác được đặt không? Chạy setkhông có tham số để xem tất cả các biến và bỏ đặt bất kỳ thứ gì xuất hiện với tiền tố đó.

Lưu ý rằng có vẻ như đây thực sự chỉ là một cách khắc phục lỗi, những thông báo đó không nên được in trừ khi bạn đã bật DYLD_PRINT_WARNINGS.

Ngoài ra, bản cập nhật lên 10.8.1 dường như đã vá được sự phiền toái này.


1
Lỗi ML, theo như tôi có thể nói. Các biến DYLD_ đó có thể quan trọng, loại bỏ chúng có thể phá vỡ bất cứ thứ gì chúng được đặt cho.
gabedwrds

2
Chà, lỗi là bạn không cần phải xem những tin nhắn đó trừ khi bạn đặt biến môi trường DYLD_PRINT_WARNINGS, nhưng vì một số lý do, Mountain Lion in chúng theo cách nào đó.
gabedwrds

2
10.8.1 Không khắc phục được sự cố
Matteo

2
Bỏ đặt tất cả các biến môi trường DYLD_ không phải là một giải pháp vì chúng có lý do. Đó là một lỗi và chúng tôi bị mắc kẹt cho đến khi Apple sửa nó.
Matteo

2
Tôi gặp vấn đề này vào ngày 10.8.3
Alex Szatmary

3

Trong zsh:

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

Điều này sinh ra một lớp vỏ con trong đó các biến môi trường mà sudo phàn nàn là không được đặt, và sau đó thực thi sudo.

Ưu điểm so với một số câu trả lời khác bao gồm:

  • Không xóa LD_LIBRARY_PATH và DYLD_LIBRARY_PATH khỏi môi trường trình bao tương tác của bạn (đối với các lệnh không phải sudo cần nó).
  • Việc sử dụng một lớp con đảm bảo rằng nếu bạn ngắt sudo trong khi nó đang chạy (ví dụ: với Ctrl-C), LD_LIBRARY_PATH và DYLD_LIBRARY_PATH của bạn sẽ không thay đổi trong vỏ chính của bạn (không giống như tập lệnh trong câu trả lời khác sẽ đặt và bỏ cài đặt chúng trong vỏ tương tác ).
  • Việc sử dụng exec đảm bảo rằng shell cha không cần thiết thoát ra ngay lập tức khi gọi sudo, do đó không có quá trình bổ sung nào bị treo trong khi lệnh chạy.

Tôi sẽ để nó như một bài tập cho người đọc chuyển sang bash, et al.


"Tôi sẽ để nó như một bài tập cho người đọc chuyển sang bash, et al." Bởi vì hầu hết người dùng Apple sử dụng ZSH so với Bash (mỉa mai) được cài đặt sẵn.
Jonathan Dumaine

2

làm việc xung quanh được tìm thấy trên các diễn đàn hỗ trợ táo của yokyoh1987,

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

trong .profile / .bashrc / .bash_profile của bạn (tùy thuộc vào cài đặt thiết bị đầu cuối của bạn):

# đặt DYLD_ * cho các chương trình bình thường của tôi
NÓI_LIBRARY_PATH = '..'

# đặt sudo thay thế
từ điển ()
{
# sao lưu các biến DYLD_ *
BACK cục bộ = $ DYLD_LIBRARY_PATH

# bỏ đặt DUY NHẤT_ *
bỏ đặt DYLD_LIBRARY_PATH

# gọi sudo
/ usr / bin / sudo "$ @"

# khôi phục DYLD_ * sau khi sudo kết thúc
xuất DYLD_LIBRARY_PATH = $ BACK
}

# chuyển hướng sudo
bí danh sudo = thesudo

Đó là một phần nhỏ thông minh của quản lý env.
bmike

Một vấn đề với giải pháp này là nếu bạn làm gián đoạn sudo (ví dụ: thông qua ctrl-c), var của bạn sẽ không được đặt trong vỏ tương tác của bạn vì hoạt động khôi phục ở cuối sẽ không được thực hiện. Sử dụng một subshell (xem câu trả lời khác của tôi cho câu hỏi này) giải quyết điều này.
Pinko

-3

Bạn có thể có bộ LD_LIBRARY_PATH.


2
Khi áp phích viết, anh ấy / cô ấy đã có unset LD_LIBRARY_PATH, và vấn đề vẫn còn.
myhd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.