我希望我的英语足以打开讨论...对不起,如果你发现一些错误!我试图编写一个bash脚本来启动byzanz-record,这是Linux Fedora下的一个屏幕录像机,可以确定一段时间,直到它被另一个脚本停止。 Byzanz-record需要一个选项--duration来指定记录的持续时间,但我认为它可能是不确定的。试图给这个命令:Bash脚本在Linux中启动byzanz记录(Fedora Xfce)
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
,我创建了两个环境变量,$ {pid_byzanz}和$ {sec_byzanz},其中第一个注册byzanz记录的过程中所必需的PID,该命令“PS -p PID -o ETIME =”这使我启动的过程的持续时间,为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脚本开始,我试图找到一个谷歌解决方案,直到我发现这个页面(How can I add numbers in a bash script)总结两个变量,我尝试没有目标,所以我的请求直接给你。
我希望在一个解决方案。
问候,
里卡多
编辑1:
在终端,我给了命令:
./launch_byzanz-record
其中 “launch_byzanz记录” 是我的脚本里面:
#!/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
和commad对现有流程的输出是:
$ 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脚本转换:
的基础是要选择一个大的定数,如:
24小时= “86400秒”= “记录时间” + “加时”
我想“记录时间”作为我的选项“--duration”的值。所以,我可以做一些这样的,大概是:
如果我的过程byzanz记录没有运行,我$ X环境变量是一个固定的大量(例如86400秒);
如果我的过程byzanz记录开始运行,相反,我$ X成为 “记录时间”= “86400秒” - “额外的时间”= “ 86400秒” - ( “86400秒” - “记录时间”),其中 “记录时间” 是 “的输出PS -p $ {pid_byzanz} -o ETIME =” 命令强权它的工作原理?
+0
当您设置'pid_byzanz'的值时,'byzanz-record'尚未运行,是吗?看起来你正在试图用'ps'来预测进程在运行时需要多长时间。 –
2013-03-08 19:02:31
+0
感谢您的回复!看一下我的问题的最后一级**编辑1 **。谢谢 –
2013-03-08 19:30:57
+0
我明白你的意思......我该怎么办? –
2013-03-08 19:38:41