ฉันต้องการเรียกใช้คำสั่งบนเชลล์ในนามของผู้ใช้รายอื่น คำสั่งมีดังนี้:
sudo -u USER cd /home/USER
ฉันเข้าใจ
sudo: cd: command not found
ไวยากรณ์ที่ถูกต้องสำหรับคำสั่งให้ส่งผ่านไปยัง sudo คืออะไร?
ฉันต้องการเรียกใช้คำสั่งบนเชลล์ในนามของผู้ใช้รายอื่น คำสั่งมีดังนี้:
sudo -u USER cd /home/USER
ฉันเข้าใจ
sudo: cd: command not found
ไวยากรณ์ที่ถูกต้องสำหรับคำสั่งให้ส่งผ่านไปยัง sudo คืออะไร?
คำตอบ:
cdเป็นbuiltin เปลือก คุณต้องเรียกใช้เชลล์เพื่อดำเนินการเชลล์บิลด์อิน:
sudo -u USER sh -c 'cd /home/USER'
หรือ
sudo -u USER bash -c 'cd /home/USER'
cdไม่ใช่คำสั่งภายนอกมันเป็นเพียง shell builtin ดังนั้นจึงsudoไม่สามารถดำเนินการได้ เหตุผลที่cdมีอยู่เป็นเชลล์บิวด์อินเท่านั้นคือกระบวนการไม่สามารถส่งผลกระทบต่อไดเร็กทอรีปัจจุบันของกระบวนการอื่น ดังนั้นโปรแกรมที่เปลี่ยนไดเรกทอรีปัจจุบันและออกทันทีจะไม่มีประโยชน์ (เกือบไร้ประโยชน์: cdโปรแกรมจะส่งคืนสถานะที่บ่งชี้ว่าประสบความสำเร็จหรือไม่)
หากคุณต้องการเปลี่ยนเป็นไดเร็กทอรีจากนั้นรันคำสั่งในฐานะผู้ใช้รายอื่นให้รันเชลล์ที่ทำสิ่งนั้นทั้งหมด
sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
ฉันมักจะใช้sudo su - USERNAMEแล้วทำสิ่งที่คุณต้องการในฐานะผู้ใช้นั้น หากต้องการออกเพียงพิมพ์exit
USERNAMEและดำเนินการคำสั่งนั้นแตกต่างกันตรงที่รันคำสั่งเป็นUSERNAME
cdเปลือกจะออกขวาหลังจาก OPsudo -iอาจต้องการ