我希望我的英語足以打開討論...對不起,如果你發現一些錯誤!我試圖編寫一個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 =」 命令強權它的工作原理?
當您設置'pid_byzanz'的值時,'byzanz-record'尚未運行,是嗎?看起來你正在試圖用'ps'來預測進程在運行時需要多長時間。 – chepner 2013-03-08 19:02:31
感謝您的回覆!看一下我的問題的最後一級**編輯1 **。謝謝 – 2013-03-08 19:30:57
我明白你的意思......我該怎麼辦? – 2013-03-08 19:38:41