วิธีการส่งออกตัวแปรสำหรับใช้กับ sudo


24

บน Slackware การใช้sbopkgอนุญาตให้สร้างแพ็คเกจจากซอร์ส Repos ไม่ใหญ่เท่า Debian แต่ก็ดี

ซอฟต์แวร์บางตัวสามารถใช้ตัวแปรสภาพแวดล้อมเช่นบน VICE c64 emulator หากFFMPEGตั้งค่าตัวแปร เป็นyesมันจะเปิดใช้งานffmpegการบันทึกอีมูเลเตอร์

ฉันพยายามใช้

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

แต่ffmpegถูกปิดใช้งาน

แต่ฉันต้องใช้

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

ซึ่งใช้งานได้

วิธีการใช้ตัวแปรสภาพแวดล้อมด้วยsudo?

คำตอบ:


39

คุณอาจใช้-Eตัวเลือกของ sudo :

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

จากคู่มือ:

-E, --preserve-env

ระบุถึงนโยบายความปลอดภัยที่ผู้ใช้ต้องการรักษาตัวแปรสภาพแวดล้อมที่มีอยู่ นโยบายความปลอดภัยอาจส่งคืนข้อผิดพลาดหากผู้ใช้ไม่ได้รับอนุญาตให้รักษาสภาพแวดล้อม

โปรดทราบว่าสิ่งนี้จะส่งออกตัวแปรสภาพแวดล้อมที่มีอยู่ทั้งหมดของคุณ มันปลอดภัยกว่าที่จะส่งออกตัวแปรสภาพแวดล้อมที่คุณต้องการด้วยไวยากรณ์ต่อไปนี้ :

sudo FMPEG=yes sbopkg -B -i vice


ขอบคุณ แต่มันใช้งานไม่ได้ (ตัวเลือก. -E) สายอื่นก็โอเคเพราะคำตอบแรกที่ฉันเลือกนั้นถูกต้อง
elbarna

11

sudoฆ่าเชื้อตัวแปรในสภาพแวดล้อมก่อนที่จะเรียกใช้คำสั่งที่กำหนด คุณจะต้องขอให้มันรักษาตัวแปรในสภาพแวดล้อมเพื่อให้คำสั่งของคุณทำงาน

นอกจากนี้คุณจะต้องตัวแปรก่อนที่จะใช้( ) กำหนดไว้ในการเดินทางเช่นเดียวกับการเรียก( ) หรือการใช้งาน( )exportFMPEGsudoexport FMPEG=yes; sudosudoFMPEG=yes sudoenvenv FMPEG=yes sudo

เพื่อรักษาตัวแปรสภาพแวดล้อมใช้-E(หรือ--preserve-env):

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

นอกจากนี้ยังเป็นไปได้ที่จะตั้งค่าตัวแปรสภาพแวดล้อมเฉพาะเช่นนี้:

$ sudo FMPEG=yes sbopkg -B -i vice

หากสิ่งนี้ล้มเหลวเนื่องจากนโยบายความปลอดภัยเข้าแทนที่รูตเชลล์และตั้งค่าตัวแปรที่นั่น:

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

6

ทราบว่า: เทียบเท่ากับ(export a=b; command) a=b commandสังเกตเครื่องหมายวงเล็บ

ถ้าเราใช้ตัวแปรไม่ใช่กับsudoแต่ตรงไปที่sbopkgดังนั้นแทนที่จะFFMPEG=yes sudo sbopkg -B -i vice ทำ sudo FFMPEG=yes sbopkg -B -i vice

หากตำรวจรักษาความปลอดภัยป้องกันสิ่งนี้ให้ทำดังนี้: sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(อย่าใช้-Eมันไม่ปลอดภัยเพราะจะทำให้ตัวแปรที่ไม่คาดคิดรั่วไหลได้ทุกประเภท)

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