2013-01-08 77 views
62

我需要將整個輸出screen保存到一個文件中,以便稍後檢查所有內容。 原因是我通過串口卸載閃存,使用屏幕與其進行交互。 我想將它保存到一個文件來檢查內存結構。將「屏幕」(程序)輸出保存到一個文件

我已經試過:

$: screen /dev/ttyUSB0 115200 >> foo.txt 
$: screen /dev/ttyUSB0 115200 | tee foo.txt 

而且我還試圖用bufferfile從屏幕上,但我不知道如何使用它。

有沒有簡單的方法?

+0

我正在使用的生產設置有多個屏幕實例。我需要輸出的那個人的行數爲'pts/10'。因此,我應該怎麼做才能將其輸出到文件中? – Sid

回答

68

有一個用於記錄的命令行選項。輸出保存到screenlog.n文件中,其中n是屏幕的編號。 從屏幕的手冊頁:

'-L'告訴屏幕打開窗口的自動輸出日誌記錄。

+3

謝謝。有沒有辦法輸出屏幕已經在其輸出緩衝區中有什麼?例如。我忘記啓用日誌記錄,但輸出在滾動屏幕緩衝區中可用 - 如何將其寫入文件? – Tagar

+13

只是搜索了更多..這裏是我的重新評論的答案 - http://stackoverflow.com/questions/4807474/copying-gnu-screen-scrollback-buffer-to-file-extended-hardcopy Ctrl + A和: 進入命令模式,然後 hardcopy -h 萬一別人會需要這個。 – Tagar

+1

將在您執行屏幕的同一目錄中創建日誌文件。 – lepe

4

在Unix下的'腳本'命令應該做的伎倆。在新控制檯啓動時運行它,你應該很好。

+0

太棒了!它在哪裏打印? – Edoardoo

+0

它應該只寫入一個文件。命令有點混亂,但我認爲這可能會解決一點:http://linux.byexamples.com/archives/279/record-the-terminal-session-and-replay-later/ – Ruben

66

您還可以使用Control-a + H將登錄保存到screenlog.n文件中。 另一個Control-a + H關閉。

C-a H:開始/結束將當前窗口記錄到文件「screenlog.n」。

+5

+1。如果無法創建日誌,請嘗試更改屏幕窗口的工作目錄:Ctrl-'a' +':'並輸入例如'chdir/home/foobar/baz' – Chriki

+1

Ca + H只是爲我切換屏幕窗口。與日誌文件無關! – aaa90210

3

下可能是有用的(測試:Linux的/ Ubuntu的12.04):

cat /dev/ttyUSB0 

使用上面,你可以然後做所有你需要重新方向。例如,要將輸出轉儲到您的控制檯,同時保存到您的文件,您應該這樣做:

cat /dev/ttyUSB0 | tee console.log 
+0

這一個完美的工作。我正在記錄來自Arduino數據捕獲會話的串行監視器輸出。 –

8

爲Mac終端:

script -a -t 0 out.txt screen /dev/ttyUSB0 115200 

細節

  • script內置應用程序 「使終端會話的打字稿」
  • -a追加到
  • -t 0時間輸出文件在寫入輸出文件之間是0秒,所以out.t XT是更新的每一個新的焦炭
  • out.txt只是輸出文件名
  • screen /dev/ttyUSB0 115200 - 從問題的命令,用於連接到外部設備

然後你可以使用尾部看到文件正在更新

尾巴-100出。txt

+0

這在Mac上不適用於我。日誌文件顯示腳本啓動公共和命令結束,但不顯示從屏幕命令收到的數據。 – David

7

所選答案對於多個會話不起作用,並且不允許指定自定義日誌文件名。

對於多屏會議,這是我的公式:

1)創建爲每個進程的配置文件:如果你想這樣做「對飛」

logfile test.log 
logfile flush 1 
log on 
logtstamp after 1 
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012" 
logtstamp on 

,您可以更改logfile自動。 \012意味着「新行」,因爲使用\n將打印在日誌文件中:source

2)開始與 「-c」 和 「-L」 標誌您的命令:

screen -c ./test.conf -dmSL 'Test' ./test.pl 

就是這樣。你會看到「test.log中」先沖洗後:

... 
6 Something is happening... 
[ test.pl: 2016-06-01 13:02:53 ] 
7 Something else... 
[ test.pl: 2016-06-01 13:02:54 ] 
8 Nothing here 
[ test.pl: 2016-06-01 13:02:55 ] 
9 Something is happening... 
[ test.pl: 2016-06-01 13:02:56 ] 
10 Something else... 
[ test.pl: 2016-06-01 13:02:57 ] 
11 Nothing here 
[ test.pl: 2016-06-01 13:02:58 ] 
... 

我發現,「-L」,即使「登錄」是在配置文件中仍然需要。

我找不到屏幕使用的時間格式變量(如%m)的列表。如果您有這些格式的鏈接,請將其張貼在下面。

** ** EXTRA

如果你想這樣做 「對飛」,你可以使用這個腳本:

#!/bin/bash 
if [[ $2 == "" ]]; then 
    echo "Usage: $0 name command"; 
    exit 1; 
fi 
name=$1 
command=$2 
path="/var/log"; 
config="logfile ${path}/${name}.log 
logfile flush 1 
log on 
logtstamp after 1 
logtstamp string \"[ %t: %Y-%m-%d %c:%s ]\012\" 
logtstamp on"; 
echo "$config" > /tmp/log.conf 
screen -c /tmp/log.conf -dmSL '$name' $command 
rm /tmp/log.conf 

要使用它,將它保存(screen.sh)並設置+ X權限:

./screen.sh TEST ./test.pl 

...並且將執行./test.pl和/var/log/TEST.log

+0

謝謝 - 「即時」部分非常有用。 –

+0

接下來,一個屏幕上運行一個配置文件在運行中創建和刪除過夜在'screen -r'上出錯,無法打開「/tmp/log.conf」'此外,屏幕從' [detached]狀態爲不存在,可能是什麼問題? –

+1

你的命令做了什麼?屏幕會在缺失時重新創建日誌文件,所以我猜測/ tmp /空間不足或者有其他一些操作系統我在幾臺服務器上使用這種方法,這些服務器無限期地運行,至少在1年內我沒有看到過這種情況,如果你想讓我們開始聊天,我可以幫助你調試你的問題 – lepe

4

創建日誌文件Ctrl + A然後Shift + H適合我。程序仍在運行時,您可以查看文件screenlog.0

2

下面的命令適用於絲網版02年4月6日

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed 

從屏幕的手冊頁:

-Logfile file : By default logfile name is "screenlog.0". 
       You can set new logfile name with the "-Logfile" option. 

可以檢查屏幕現有版本使用屏幕-version。您可以從https://www.gnu.org/software/screen/下載並安裝最新的屏幕版本。