我必须运行一个 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.