如何从脚本运行用户命令

如何从脚本运行用户命令

我必须运行一个 vlc 命令,但无法以 root 身份运行。我以 root 身份登录。我想将命令放入脚本(shell 脚本)中并运行该命令。我该怎么做?我的脚本是

    #!/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 命令,它可以工作,但我将它们放在 shell 脚本中,则不起作用。请帮帮我。

答案1

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,它会在用户帐户下打开一个 shell。然后您可以以交互方式进入该 shell。使用 编写 shell 脚本时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将在用户帐户下打开登录 shell。只有退出该 shell 后,该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.

相关内容