BASH - เรียกใช้คำสั่งโดยใช้ sudo แต่อยู่ในหน้าจอเดี่ยว


2

ฉันพยายามเรียกใช้คำสั่งในฐานะผู้ใช้ที่แตกต่างกัน แต่ในหน้าจอที่แยกออกมาและดูเหมือนจะไม่สามารถรับไวยากรณ์ได้ค่อนข้างถูกต้อง หากฉันแบ่งคำสั่งต่าง ๆ ฉันสามารถทำให้พวกมันทำงานได้ แต่เมื่อฉันรวมคำสั่งทั้งหมดเข้าด้วยกันจะไม่มีอะไรเกิดขึ้น

สิ่งที่ฉันพยายาม:

COMMAND='COUNTER=0; while [ $COUNTER -lt 10 ]; do echo Count: $COUNTER; let COUNTER=COUNTER+1; sleep 15; done'

if [ $USER_CURRENT = $USER_RUN_AS ]; then
    screen -dmS $REMOTE_REPO_NAME -c "$COMMAND 2>&1 >> $LOG_FILE_URI"        
 else

     # This works, but I would like it to run in detached screen
     # sudo su -s /bin/bash $USER_RUN_AS -c " $COMMAND 2>&1 >> $LOG_FILE_URI "

     # Tried piping screen to the sudo command
     # screen -dmS $REMOTE_REPO_NAME $COMMAND | sudo -S su -s /bin/bash $USER_RUN_AS 2>&1 >> $LOG_FILE_URI

     # Tried passing the command to screen
     screen -dmS $REMOTE_REPO_NAME -c "$COMMAND 2>&1 >> $LOG_FILE_URI | sudo -S su -s /bin/bash $USER_RUN_AS"

fi

คำตอบ:


2

ฉันคิดว่าความพยายามครั้งที่สองและครั้งที่สามของคุณมีความถูกต้อง แต่ไม่เป็นระเบียบ ลอง

sudo su -s /bin/bash $USER_RUN_AS -c "screen -dmS $REMOTE_REPO_NAME \"$COMMAND 2>&1 >> $LOG_FILE_URI\" "

ฉันไม่คิดว่ามันสมเหตุสมผลที่จะใช้ไพพ์


ฉันพยายามเรียกใช้คำสั่งในฐานะผู้ใช้รายอื่นภายในหน้าจอ
Mike Purcell

@MikePurcell: อุ๊ปส์; ความผิดฉันเอง. ฉันลองอีกครั้ง
สกอตต์

สิ่งนี้ดูเหมือนจะใช้ได้สำหรับฉัน แต่ฉันไม่ดีพอที่จะใช้ * ระวังในการพูดด้วยความมั่นใจ 100% ว่าถูกต้องเสมอ +1 ยังไงก็ตาม
Patrick M

0
screen -dmS $REMOTE_REPO_NAME sudo su - $USER_RUN_AS -c "$COMMAND 2>&1 >> $LOG_FILE_URI"

คือทั้งหมดที่คุณต้องการ เพียงเรียกใช้ sudo ภายในหน้าจอของคุณ -cสลับไปที่หน้าจอคือ "read config file" นี่อาจไม่ใช่สิ่งที่คุณต้องการ

  -c file
        override  the default configuration file from "$HOME/.screenrc" to
        file.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.