วิธีการเปลี่ยน / เปลี่ยนรหัสผู้ใช้กับสคริปต์ทุบตีเพื่อรันคำสั่งในสคริปต์เดียวกันได้หรือไม่


14

มีวิธีการเปลี่ยนรหัสประจำตัวผู้ใช้ภายในสคริปต์ (ดำเนินการในฐานะรูทซึ่งเป็นส่วนหนึ่งของกระบวนการติดตั้ง) เพื่อดำเนินการคำสั่งบางอย่างโดยไม่เรียกสคริปต์ภายนอกแล้วกลับrootไปใช้คำสั่งอื่นหรือไม่

เรียงจาก:

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...


คุณควรดูคำตอบนี้stackoverflow.com/a/17758312/1243547
Klaus

คำตอบ:


28

ไม่ แต่คุณสามารถใช้sudoเพื่อเรียกใช้เชลล์และใช้ heredoc เพื่อป้อนคำสั่ง

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami

สิ่งนี้จะทำงานในการเก็บสิ่งต่าง ๆ ไว้ด้วยกันในสคริปต์เดียวกันและยังสามารถใช้การทดแทนคำสั่งได้หากทุกอย่างถูกห่อด้วยวงเล็บปิดหนึ่งบรรทัดหลัง EOF
a1an

คำตอบนี้จะดีกว่าทุกคำตอบในคำถามที่ว่านี้อย่างใดอย่างหนึ่งที่ซ้ำกัน
Dan Dascalescu

1
ฉันเกือบจะสงสัยว่าถ้าฉันจะทำเช่นนี้ฉันจะไม่ใช้ EOF และเปลี่ยนชื่อ heredoc เป็น SUDO แทน ด้วยวิธีนี้ฉันจะจำได้ว่าฉันใช้งานเป็นผู้ใช้ขั้นสูงภายในรหัสที่มีอยู่
Joe Heyming

ด้วยเหตุผลบางอย่างดูเหมือนว่าการตั้งค่า vars ในคำสั่ง heredoc ไม่ได้ตั้งค่า vars ถ้าฉันลองBLA="something"แล้วเช่น: echo "In: $BLA"ดูเหมือนว่า BLA ว่างเปล่า
Efren
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.