先要說明為什么要記錄終端會話,因為常會遇到這樣的情況,終端是有緩存大小限制的,當在終端打印的消息超出緩存范圍,它前面的打印消息就自動丟失了,這對於我們調試程序會造成障礙,所以有記錄完整終端打印消息的必要!
1使用script記錄Linux終端會話
script是大多數Linux產品util-linux軟件包的一部分。
script記錄會話的一切內容:你輸入的內容和你看到的內容。它甚至記錄顏色;因此如果你的命令提示符或程序輸出中包含顏色,script將記錄它。
要使用script,簡單執行以下命令:
$ script
默認情況下,它向當前目錄的typescript文件中寫入內容。然后,你輸入的一切內容都被記錄到那個文件中。要往另一個文件中記錄日志,只需使用script/path/to/file命令。
完成記錄后,輸入exit退出。這個命令將關閉script會話並保存文件。現在你可以使用cat或其它任何程序來檢查日志文件。
在Ubuntu/或者其他linux下運行,
script screen.log
開始記錄,
記錄屏幕信息到screen.log里,一直記錄到你exit為止,記錄屏幕log的好方法…
結束記錄:
exit
使用實例
-
-
aulyp@ubuntu:/home/workspace/Android_eclair_smdk6410$ sudo script screen.log //¿ªÊ¼¼Ç¼
-
-
[sudo] password for aulyp:
-
-
Script started, file is screen.log
-
-
root@ubuntu:/home/workspace/android_eclair_smdk6410# sudo make clean
-
-
============================================
-
-
PLATFORM_VERSION_CODENAME=REL
-
-
PLATFORM_VERSION=2.1
-
-
TARGET_PRODUCT=generic
-
-
TARGET_BUILD_VARIANT=eng
-
-
TARGET_SIMULATOR=
-
-
TARGET_BUILD_TYPE=release
-
-
TARGET_ARCH=arm
-
-
HOST_ARCH=x86
-
-
HOST_OS=linux
-
-
HOST_BUILD_TYPE=release
-
-
BUILD_ID=ERD79
-
-
============================================
-
-
Cleaning out/target/product/generic...
-
-
Cleaning out/target/common...
-
-
Cleaning out/host/linux-x86...
-
-
Cleaning out/host/common...
-
-
Clean.
-
-
root@ubuntu:/home/workspace/android_eclair_smdk6410# exit //Í˳ö¼Ç¼
-
-
exit
-
-
Script done, file is screen.log
-
-
aulyp@ubuntu:/home/workspace/android_eclair_smdk6410$
已經找到了解決方法,異常退出也沒有問題,仍然記錄log,需要加上參數,script -f ido.log,如果在一個終端上使用mkfifo ido.log;script -f ido.log 然后在另一個終端登錄,找到這個ido.log文件,你tail -f 就會滾動輸出你操作的內容..這個非常方便…
2.使用script的缺點在於,它記錄所有特殊的字符;因此你輸入的文件中將充滿控制字符和ANSI轉義序列。你可以在script中使用一個非常簡單的shell來解決這個問題:
SHELL=/bin/bash PS1=”$ ” script
使用script時,不要使用交互式程序或處理窗口的程序,如vior top。它們會破壞會話的輸出結果。另外,日志文件會記錄你使用的任何命令行程序和你完成一項任務所采取的步驟。如果你需要在腳本中編輯一個文件,考慮退出script會話,然后用script –a(它在舊會話后添加新會話)對文件進行編輯后再重新啟動會話。