スクリプトからユーザーコマンドを実行する方法


1

rootとして実行できないvlcコマンドを実行する必要があります。ルートとしてログインしています。コマンドをスクリプト(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コマンドを実行すると、動作しますが、シェルスクリプトに入れて動作しません。私を助けてください。

回答:


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を使用してシェルスクリプトを作成するときの秘-ctheは、コマンドがユーザーとして実行されるようにオプションを使用することです。

考慮してください:

#!/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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.