como executar um comando do usuário a partir de um script

1

Eu tenho que executar um comando vlc, que não pode ser executado como root. Estou logado como root. Eu quero colocar o comando em um script (shell script) e executar o comando. Como posso fazer isso? Meu script é

    #!/bin/sh
su - user 
vlc -vvv bigbuck.mp4 --sout '#rtp{dst=99.195.203.99,port=8090,sdp=rtsp://99.195.203.99:8091/test.sdp}' &

Se eu do comando promt, eu faço su - user e executo o comando vlc, ele funciona, mas eu coloco esses no shell script, então não estou funcionando. Por favor me ajude.

    
por prashantas 02.03.2015 / 05:48

1 resposta

2

Para executar vlc como outro usuário, use:

#!/bin/sh
su user -c 'vlc -vvv bigbuck.mp4 --sout "#rtp{dst=99.195.203.99,port=8090,sdp=rtsp://99.195.203.99:8091/test.sdp}" &

Se você não precisar da interface gráfica, considere usar cvlc no lugar de vlc :

#!/bin/sh
su user -c 'cvlc -vvv bigbuck.mp4 --sout "#rtp{dst=99.195.203.99,port=8090,sdp=rtsp://99.195.203.99:8091/test.sdp}" &

Discussão

Quando alguém executa su - user na linha de comando, ele abre um shell na conta do usuário. Você pode entrar interativamente nesse shell. Ao escrever um script de shell com su , o truque é usar a opção -c para que o comando seja executado como usuário.

Considere:

#!/bin/sh
su - user 
vlc -vvv bigbuck.mp4 --sout '#rtp{dst=99.195.203.99,port=8090,sdp=rtsp://99.195.203.99:8091/test.sdp}' &

O comando su - user abrirá um shell de login na conta do usuário. Somente depois que o shell sair, o comando vlc será executado. Isso não é o que você quer e é por isso que a opção -c é necessária.

Documentação

A opção -c para su está documentada em man su :

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.

       The executed command will have no controlling terminal. This option
       cannot be used to execute interractive programs which need a
       controlling TTY.
    
por 02.03.2015 / 06:03