私の英語がディスカッションを開くのに十分であることを願っています...何か間違いを見つけたらごめんなさい!Linux Fedoraでスクリーンレコーダーであるbyzanz-recordを別のスクリプトで停止するまで、不定の時間起動するbashスクリプトを作成しようとしています。Byzanz-recordは、記録の期間を指定するオプション--durationを必要としていますが、代わりに無期限にすることができます。このコマンドを実行しようとしています:
byzanz-record -v -a -c --display=:0.0 --width=1366 --height=768 --duration=86400 --delay=0 ~/Video/test.flv
それを停止し、killコマンドを使用して手動で停止するには、決定すると、仮想期間が24時間(86400秒)のtest.flvファイルを取得します。ビデオは実際にはビデオであるため、タイムラインスライダーを使用してビデオをスクロールすることはできません。 24時間もかからないので、とても難しいので、実際の長さを示すビデオを撮りたいと思います。そのため、-durationオプションとしてアンビエント変数を使用することを考えています。私はこのようにそれを試しています:
#!/bin/bash
pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record")
sec_byzanz=$(ps -p ${pid_byzanz} -o etime= > /tmp/byzanz_elapsed_time && more /tmp/byzanz_elapsed_time | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc)
x=$(( ${sec_byzanz} + 3 ))
byzanz-record -v -a -c --display=:0.0 --width=1366 --height=768 --duration=$x --delay=0 /home/Riccardo/Video/test.flv
exit
ここで、2つの環境変数${pid_byzanz}と${sec_byzanz}を作成します。最初の変数は、コマンド "ps -p PID -oetime="に必要なbyzanz-recordのプロセスのPIDを登録します。起動されたプロセスのhh:mm:ss形式で、次のコマンドを使用して数秒で変換します。
sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc
これをアンビエント変数${sec_byzanz}に登録します。これは、プロセスを開始できるように任意の数(たとえば、3)増やす必要があると思います。そうしないと、プロセスが開始するのと同じ瞬間に終了する可能性があります。このようにして、プロセスの期間を無期限に取得できるはずです(--durationオプションは、起動された別のスクリプトから次のキルが生成されるまで、3とそれ自体が増加する数値の合計になるため)。
これは私の考えですが、スクリプトは$ {sec_byzanz}変数を3と合計しないため、期待どおりに機能しませんが、継続時間として3秒しかないビデオを作成します。どうすれば自分の目的を実現できますか。私はbashスクリプトを始めたばかりで、このページ(bashスクリプトに数値を追加するにはどうすればよいですか)を見つけて2つの変数を合計するまで、Googleで解決策を見つけようとしましたが、目標なしで試しました。あなたに直接リクエストしてください。
私は解決策を望んでいます。
ご挨拶、
リカルド
編集1:
ターミナルで、次のコマンドを実行します。
./launch_byzanz-record
ここで、「launch_byzanz-record」は内部にある私のスクリプトです。
#!/bin/bash
pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record")
sec_byzanz=$(ps -p ${pid_byzanz} -o etime= > /tmp/byzanz_elapsed_time && more /tmp/byzanz_elapsed_time | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc)
x=$(( ${sec_byzanz} + 60 ))
byzanz-record -v -a -c --display=:0.0 --width=1366 --height=768 --duration=$x --delay=0 /home/Riccardo/Video/test.flv
exit
現在のプロセスのコンマの出力は次のとおりです。
$ ps ax | grep byzanz-record
4314 pts/1 S+ 0:00 /bin/bash ./launch_byzanz-record
4318 pts/1 Sl+ 0:04 byzanz-record -v -a -c --display=:0.0 --width=1366 --height=768 --duration=60 --delay=0 /home/Riccardo/Video/test.flv
4330 pts/0 S+ 0:00 grep --color=auto byzanz-record
60秒の終わりまで(何が起こるかをテストする時間を与えるために秒を増やしました)。
編集2:
おそらく私はこのようなことをすることができます、アイデアとして、私はbashスクリプトで変換しようとしなければなりません:
基本は、次のような大きな固定数を選択することです。
24h="86400秒"="記録時間"+"延長時間"
オプション「--duration」の値として「recordtime」が必要です。だから、私はおそらくこのようなものを作るかもしれません:
プロセスbyzanz-recordが実行されていない場合、$ xアンビエント変数は固定された大きな数値です(例:86400秒)。
プロセスbyzanz-recordが実行を開始すると、代わりに、$xは" record time " = " 86400 seconds "-" extra time " = "86400 seconds"-( "86400 seconds"-"record time")になります。ここで、 " record time "は、" ps -p $ {pid_byzanz} -o etime = "コマンドの出力です...アイデアとして機能する可能性がありますか?