Làm thế nào để xuất biến để sử dụng với sudo?


24

Trên Slackware, sử dụng sbopkgcho phép một người xây dựng gói từ nguồn. Repos không lớn như Debian, nhưng nó rất hay.

Một số phần mềm có thể sử dụng các biến môi trường, ví dụ như trên trình giả lập VICE c64, nếu biến FFMPEGđược đặt thành yes, nó sẽ cho phép ffmpegghi lại trình giả lập.

Tôi đã thử sử dụng

$ export FFMPEG=yes; sudo sbopkg -B -i vice

nhưng ffmpegbị vô hiệu hóa

Thay vào đó tôi phải sử dụng

$ su -
$ export FFMPEG=yes
$ sbopkg -B -i vice

mà hoạt động.

Làm thế nào để sử dụng các biến môi trường với sudo?

Câu trả lời:


39

Bạn có thể sử dụng -Etùy chọn của sudo :

FMPEG=yes sudo -E sbopkg -B -i vice

Từ hướng dẫn:

-E, --preserve-env

Chỉ ra chính sách bảo mật mà người dùng muốn duy trì các biến môi trường hiện có của họ. Chính sách bảo mật có thể trả về lỗi nếu người dùng không có quyền bảo vệ môi trường.

Lưu ý rằng điều này xuất tất cả các biến môi trường hiện tại của bạn. Sẽ an toàn hơn khi chỉ xuất các biến môi trường bạn cần với cú pháp sau :

sudo FMPEG=yes sbopkg -B -i vice


Cảm ơn nhưng nó không hoạt động (tùy chọn.-E) dòng khác vẫn ổn vì câu trả lời đầu tiên tôi chọn là chính xác.
elbarna

11

sudovệ sinh các biến trong môi trường trước khi gọi lệnh đã cho. Bạn sẽ phải yêu cầu nó bảo toàn các biến trong môi trường để lệnh của bạn hoạt động.

Thêm vào đó, bạn sẽ phải exportcác FMPEGbiến trước khi sử dụng sudo( export FMPEG=yes; sudo), gán nó trong cùng đi như cách gọi sudo( FMPEG=yes sudo), hoặc sử dụng env( env FMPEG=yes sudo).

Để bảo toàn các biến môi trường, sử dụng -E(hoặc --preserve-env):

$ env FMPEG=yes sudo -E sbopkg -B -i vice

Cũng có thể đặt các biến môi trường cụ thể như thế này:

$ sudo FMPEG=yes sbopkg -B -i vice

Nếu điều này không thành công do chính sách bảo mật tại chỗ, hãy đưa ra một vỏ gốc và đặt biến ở đó:

$ sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit

6

lưu ý rằng: (export a=b; command)tương đương với a=b command. Lưu ý các dấu ngoặc.

Sau đó, nếu chúng ta áp dụng biến không phải sudonhưng trực tiếp sbopkg, vì vậy thay vì FFMPEG=yes sudo sbopkg -B -i vice chúng ta có thể làm sudo FFMPEG=yes sbopkg -B -i vice

Nếu cảnh sát an ninh ngăn chặn điều này, thì: sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(Đừng sử dụng -E, chúng tôi không an toàn vì nó sẽ rò rỉ tất cả các loại biến không mong muốn.)

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.