我希望我的英语足以展开讨论...如果您发现一些错误,请见谅!我正在尝试编写一个 bash 脚本来启动 byzanz-record(Linux Fedora 下的屏幕录像机)一段不确定的时间,直到它被另一个脚本停止。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
我在其中创建了两个环境变量 ${pid_byzanz} 和 ${sec_byzanz},其中第一个注册了 byzanz-record 进程的 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 脚本,我试图在谷歌上找到一个解决方案,直到我找到这个页面(如何在 bash 脚本中添加数字)来总结两个变量,我没有目标地尝试过,所以我的直接向您请求。
我希望有一个解决方案。
问候,
里卡多
编辑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
当前进程的 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 脚本中进行转换:
基数是选择较大的固定数,如:
24h = "86400 秒" = "记录时间" + "加时赛"
我希望“记录时间”作为我的选项“--duration”的值。所以,我可能会做一些这样的,可能:
如果我的进程byzanz-record没有运行,我的$x环境变量是一个固定的大数字(例如86400 seconds);
如果我的进程byzanz-record开始运行,相反,我的$x变为“记录时间”=“ 86400 秒”-“额外时间”= “86400 秒”-(“86400 秒”-“记录时间”),其中“记录” time ”是“ ps -p ${pid_byzanz} -o etime= ”命令的输出......它可以作为想法吗?