1

Я должен выполнить команду vlc, которая не может быть запущена от имени пользователя root. Я вошел как root. Я хочу поместить команду в скрипт (shell 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}' &

Если я из командной строки, я делаю su - user и запускаю команду vlc, она работает, но я помещаю их в сценарий оболочки, а затем не работает. Пожалуйста, помогите мне.

1 ответ1

2

Чтобы запустить vlc от имени другого пользователя, используйте:

#!/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}" &

Если вам не нужен графический интерфейс, вы можете использовать cvlc вместо 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}" &

обсуждение

Когда пользователь запускает su - user в командной строке, он открывает оболочку под учетной записью пользователя. Затем вы можете интерактивно войти в эту оболочку. При написании сценария оболочки с помощью su хитрость заключается в использовании опции -c чтобы команда запускалась от имени пользователя.

Рассматривать:

#!/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}' &

Команда su - user откроет оболочку входа под учетной записью пользователя. Только после выхода из этой оболочки будет запущена команда vlc . Это не то, что вы хотите, и поэтому нужна опция -c .

справки о

Опция -c для su задокументирована в 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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .