“ sudo: source: ไม่พบคำสั่ง”


15
$ source /etc/environment 

$ sudo source /etc/environment 
[sudo] password for t: 
sudo: source: command not found

ดูเหมือนว่าเชลล์ที่แตกต่างจากที่bashใช้ในการดำเนินการsource /etc/environmentและเชลล์นั้นไม่มีsourceในตัว

bashแต่ฉันและรากของเปลือกหอยเริ่มต้นมีทั้ง

$ echo $SHELL
/bin/bash

ถ้าsudoindeeds ใช้เชลล์ที่ต่างกันทำไมมันถึงเป็นเช่นนั้น? ฉันเห็นคำตอบของ slmแต่ไม่เข้าใจในกรณีของฉัน


4
sourceเป็นเปลือก builtin..you ไม่สามารถใช้sudoในการทำงานในตัวเปลือกเช่นคำสั่งภายนอก ..
heemayl

เป็นปัญหาที่คุณไม่สามารถอ่านไฟล์หรือว่าคุณต้องการสภาพแวดล้อมที่กำหนดไว้ในไฟล์ที่จะนำไปใช้กับคำสั่ง sudo ต่อมา?
Random832

@ Random832: ต้องการสภาพแวดล้อมที่กำหนดไว้ในไฟล์เพื่อนำไปใช้กับคำสั่ง sudo ต่อมา
ทิม

คำตอบ:


23

sourceเป็นเชลล์ในตัวดังนั้นจึงไม่สามารถดำเนินการได้หากไม่มีเชลล์ อย่างไรก็ตามโดยค่าเริ่มต้นsudoอย่ารันเชลล์ จากsudo

แบบจำลองกระบวนการ

เมื่อ sudo รันคำสั่งมันจะเรียก fork (2), ตั้งค่าสภาพแวดล้อมการดำเนินการตามที่อธิบายไว้ข้างต้นและเรียกการเรียกระบบ execve ในกระบวนการลูก

หากคุณต้องการรันเชลล์อย่างชัดเจนให้ใช้-sตัวเลือก:

# sudo -s source /etc/environment

ซึ่งยังคงไร้ประโยชน์เพราะหลังจากเชลล์ออกแล้วการเปลี่ยนแปลงสภาพแวดล้อมจะหายไป


7

ในขอบเขตของการแก้ปัญหาแทนที่จะตอบคำถามนี่เป็นวิธีที่ชัดเจนที่สุด (สำหรับฉัน) ในการหาแหล่งไฟล์ที่รูทเท่านั้นสามารถอ่านได้:

source <(sudo cat /etc/environment)

นี้ใช้ทดแทนกระบวนการ มันใช้เอาต์พุตของcatคำสั่งและเปลี่ยนเป็นไฟล์หลอกซึ่งคุณสามารถส่งผ่านไปsourceได้ ซอร์สจึงรันคำสั่งในเชลล์ปัจจุบัน

โปรดทราบว่าในระบบส่วนใหญ่/etc/environmentสามารถอ่านได้ทั่วโลกดังนั้นคุณควรเรียกใช้สิ่งนี้:

source /etc/environment

1
งานนี้ได้รับการยอมรับไม่ได้
Claudiu Creanga

2

sudoคาดว่าคำสั่ง แต่คุณกำลังให้เชลล์บิวด์อินดังนั้นจึงไม่สามารถหาคำสั่งได้ หากคุณเขียนtype sourceคุณจะเห็นผลลัพธ์: source is a shell builtinและผลลัพธ์ของwhich sourceว่างเปล่า

ตัวอย่างเช่นsudo straceจะทำงานและwhich straceจะให้ผลลัพธ์เพราะ strace เป็นคำสั่ง

แก้ไข: นอกจากนี้คุณสามารถเห็นsudo su;sudo source /etc/environmentผลงานได้อย่างดีดังนั้นจึงไม่ใช้เชลล์ที่แตกต่างกัน

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