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

2

Eu estou tentando executar um comando como um usuário diferente, mas dentro de uma tela desanexada e não consigo obter a sintaxe muito bem. Se eu dividir os comandos, posso fazê-los funcionar, mas, quando os reuni, 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
Mike Purcell
fonte

Respostas:

2

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

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

Eu não acho que faz sentido usar um cachimbo.

Scott
fonte
Estou tentando executar o comando como outro usuário em uma tela.
Mike Purcell
@ MikePurcell: Opa; minha culpa. Eu fiz outra tentativa.
Scott
Isso parece funcionar para mim, mas eu não sou bom o suficiente com * nix para dizer com 100% de certeza que está sempre certo. 1 de qualquer maneira, senhor.
Patrick M
0
screen -dmS $REMOTE_REPO_NAME sudo su - $USER_RUN_AS -c "$COMMAND 2>&1 >> $LOG_FILE_URI"

é tudo o que você precisa. Basta executar o sudo dentro sua tela. -c mudar para a tela é "ler arquivo de configuração". Isso provavelmente não é o que você quer.

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