Command-Line-Interface

配置 GNU 螢幕,以便將命令歷史儲存在文件中

  • February 22, 2016

我想配置 GNU 螢幕,以便它將所有不同視窗的命令歷史記錄儲存在不同的文件中。

我知道預設情況下 GNU 螢幕根本不會將命令歷史記錄(其不同視窗的)儲存在文件中(而是將它們儲存在記憶體中),但是可以告訴它將它們儲存在文件中嗎?

不同的命令歷史文件應具有名稱<session>.<window>.history或類似名稱。

有誰知道如何做到這一點?

(為了清楚起見,我希望每個 GNU 螢幕視窗寫入不同的文件。我喜歡每個視窗都有不同的歷史記錄,並且我通常在不同的視窗中執行不同類型的命令。)

在某處創建一個看起來像這樣的腳本。

~/bin/myshell

#!/bin/bash
HISTFILE=~/.bash_history_w$WINDOW
# HISTFILE=~/.bash_history_w${WINDOW}_s${STY##*.}  # with session name.
export HISTFILE
exec /bin/bash

用這樣的線調整你的 .screenrc 。

shell ~/bin/myshell

謝謝,但有一個問題:在我關閉視窗之前,文件似乎實際上並沒有被寫入。但就我而言,窗戶將始終處於活動狀態並且永遠不會關閉。如何在不關閉視窗的情況下觸發文件寫入?

您可以通過執行命令手動強制寫入history -w。我不相信有任何方法可以讓 bash 在退出時自動送出歷史記錄。不過,在zsh中似乎有一個選項可以執行此操作,請搜尋 INC_APPEND_HISTORY。

如果您想要記錄每個會話所做的事情,您可以使用腳本。如果您想使用腳本在腳本下創建每個會話+視窗日誌,您可以像這樣調整 myshell。

#!/bin/bash
SHELL=/bin/bash  # reset the shell back to bash since screen -s will adjust to to myshell
export SHELL
script -a  -q -f ~/.sessionlog_w${WINDOW}_s${STY##*.}

引用自:https://serverfault.com/questions/219630