BASH - Executar comando usando sudo, mas dentro de uma tela separada

2

Estou tentando executar um comando como um usuário diferente, mas dentro de uma tela desanexada e não consigo obter a sintaxe corretamente. Se eu dividir os comandos, posso fazê-los funcionar, mas quando eu juntar todos eles, nada acontece.

O que estou tentando:

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
    
por Mike Purcell 21.07.2013 / 19:14

2 respostas

2

Eu acho que suas segunda e terceira tentativas têm todas as peças certas, mas fora de ordem. Experimente

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

Acho que não faz sentido usar um cachimbo.

    
por 22.07.2013 / 03:00
0
screen -dmS $REMOTE_REPO_NAME sudo su - $USER_RUN_AS -c "$COMMAND 2>&1 >> $LOG_FILE_URI"

é tudo que você precisa. Basta executar sudo dentro de sua tela. A opção -c para a tela é "read config file". Provavelmente não é isso que você quer.

  -c file
        override  the default configuration file from "$HOME/.screenrc" to
        file.
    
por 22.07.2013 / 19:29

Tags