之前看到過倆個很有意思的命令script和srciptreplay,可以把終端的會話記錄到一個檔案裡,今天就給大家做一下有趣並有意義的操作。
一、實現代碼
檔案:Record.sh
#! /bin/bash# Filename:Record.sh read -p "Please input the sesson filename you want to creat: " filename; sesfile="$filename.session"logfile="$filename.timing.log" if [ -e $sesfile ];then echo "$sesfile is Exsit,Creat session file fault!"; read -p "If you want to reload the file? [Y/N]: " flag; if [ "$flag" = "Y" ];then rm $sesfile $logfile; script -t 2> $logfile -a $sesfile; else echo "Nothing to do!"; fi else script -t 2> $logfile -a $sesfile;fi
檔案:Replay.sh
#! /bin/bash# Filename:Replay.sh read -p "Please input the session filename: " filenamelogfile="$filename.timing.log"sesfile="$filename.session"if [ -e $sesfile ]; then scriptreplay $logfile $sesfile echoelse echo "$filename is NOT Exsit!"fi
二、程式分析
首先來說說這兩個檔案分別是用來幹什麼的吧,Record.sh是用來記錄你所執行的命令和螢幕的輸出的,而Replay.sh是用來回放Record.sh所錄製的內容的。
在Record.sh中,首先要求你輸入一個用來儲存資訊的檔案名稱,如output,然後在程式中建立兩個檔案,檔案名稱為你所輸入的檔案名稱加上不同的尾碼形成,如output.timing.log和output.session,然後檢查所輸入的檔案是否已存在,若存在,則詢問是否以新的檔案覆蓋舊的檔案,若是,則刪除原有檔案,建立新的檔案並寫入資料,若否,則不做任何工作。Replay.sh中輸入一個檔案名稱,首先判斷該檔案是否存在,存在則播放。
在Record.sh中,可以看到script的參數是兩個檔案,為了便於辨認,我在輸入的檔案名稱加上了特定的尾碼,即使在Linux上,檔案尾碼是沒意義的,其中一個尾碼的.timing.log,用於儲存時序資訊,描述每一個命令在何時運行,另一個檔案,尾碼為.session,用於儲存命令輸出。有了這兩個檔案就可以實現播放功能,這就有點像大家熟悉的Windows下的lrc歌詞檔案的播放功能吧,個人覺得。
而由於有兩種輸出,所以就要用資料流重新導向,把不同的輸出資料流輸出不同的檔案中,在Record.sh中我們也可以看到,我們用2>把時序資訊通過stderr寫入檔案*.timing.log,通過>把命令執行資訊寫入檔案*.session。
而Replay.sh則相對簡單,它只需要判斷輸入的檔案是否存在,就可以進行播放。如你想播放上面Record.sh中製作的檔案,則只需要輸入output即可。
相信看了這些案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
相關閱讀:
執行個體詳解ajax實現無重新整理上傳檔案功能
PHP中使用jQuery+Ajax實現分頁查詢功能
AJAX實現簡單的註冊頁面非同步請求執行個體代碼