ฉันต้องการเรียกใช้คำสั่งบนเชลล์ในนามของผู้ใช้รายอื่น คำสั่งมีดังนี้:
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
อาจต้องการ