Script para su -c em uma tela não está funcionando como pretendido

1

Estou trabalhando em um script que me permitirá carregar uma tela de um usuário via sudo e su -c. No entanto, quando eu usá-lo, ele apenas mostrará o shell do usuário:

sudo su -c "script /dev/null; screen -r $2" $1

Perdoe-me se isso é algo relativamente estúpido, eu sou novo em lote de scripts. Tal como está, executa / dev / null (usado para fazer o acesso à tela em su possível) .. mas não se conecta à tela. Tenho certeza de que o nome da tela é preciso e o usuário também está fazendo login.

    
por VoidWhisperer 10.01.2014 / 22:28

2 respostas

1

Recentemente encontrei essa confusão de 'bonecas de aninhamento' com ssh + su + screen + rtorrent, então acho que posso ajudar.

Para alcançar os resultados desejados, você pode usar;

sudo su -c "script /dev/null -c \"screen -r $2\"" $1

A maneira como você está fazendo isso agora só lança screen após script ter terminado (via exit , etc) e não tem nenhum efeito na sua screen sessão . No método acima, você inicia o comando screen dentro da script session ( script -c ). Observe as aspas com escape ( \ ").

Com isso dito, você ainda está fazendo errado. Não faz sentido usar sudo e su juntos nesse contexto (não consigo pensar em nenhum contexto correto). A solução é usar um ou outro com base na sua implementação.

  1. método sudo (requer um arquivo sudoers configurado corretamente, pode ser usado para ignorar o login):% sudo -u "$1" "script /dev/null -c \"screen -r $2\""
  2. método su (requer logon geralmente, útil para root):
    su "$1" -c "script /dev/null -c \"screen -r $2\""

Todas essas informações estão disponíveis por meio das man pages (digite q para sair). Como um novato, acho-os extremamente úteis:

man su; man sudo; man script; man screen

Ou simplesmente peça ajuda ao programa:

su --help; sudo -h; script --help; screen --help

Além disso, se alguém está vindo aqui para receber conselhos de rtorrent, a resposta é:

su ${user} -c "script /dev/null -qc \"screen -dr ${session_name}\""

    
por 13.02.2014 / 20:42
0

O que você está fazendo é:

  1. Executar script /dev/null . Isso executa um shell interativo e coloca a transcrição dessa sessão em /dev/null .
  2. Quando o shell interativo sair, script terminará e screen será iniciado.

Eu não sei por que você está tentando usar script aqui, especialmente quando você não quer a transcrição.

Usar su em sudo é redundante: sudo já tem essa funcionalidade.

sudo -u "$1" screen -r "$2"
    
por 11.01.2014 / 03:51