BASH - 使用 sudo 但在分离的屏幕内运行命令

BASH - 使用 sudo 但在分离的屏幕内运行命令

我尝试以其他用户身份运行命令,但在分离的屏幕内,似乎无法正确使用语法。如果我拆分命令,我可以使其工作,但当我将它们拼凑在一起时,什么也没有发生。

我正在尝试:

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

答案1

我认为你的第二次和第三次尝试都正确,但顺序不对。尝试

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

我认为使用管道没有意义。

答案2

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

就是你所需要的。只需运行 sudo之内你的屏幕。 -C切换到屏幕是“读取配置文件”。这可能不是您想要的。

  -c file
        override  the default configuration file from "$HOME/.screenrc" to
        file.

相关内容