Bash:如何在屏幕会话中获取命令历史记录?

hex*_*ide 20 bash command-line gnu-screen

如果我开始使用屏幕会话screen -dmS name,我将如何使用脚本访问该屏幕会话的命令历史记录?

使用,即使在屏幕中也会显示最后执行的命令.

Nat*_*igh 23

我在我的系统上使用默认的bash shell,因此可能无法与其他shell一起使用.

这就是我在~/.screenrc文件中的内容,以便每个新的屏幕窗口都有自己的命令历史记录:

具有自己的命令历史记录的默认屏幕Windows

要打开一组默认屏幕窗口,每个窗口都有自己的命令历史记录文件,您可以将以下内容添加到~/.screenrc文件中:

screen -t "window 0" 0 bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash'
screen -t "window 1" 1 bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash'
screen -t "window 2" bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash'
Run Code Online (Sandbox Code Playgroud)

确保新Windows获取自己的命令历史记录

默认屏幕设置意味着您使用Ctrl+a c或创建新窗口Ctrl+a Ctrl+c.但是,只有~/.screenrc文件中的上述内容,这些将使用默认~/.bash_history文件.要解决此问题,我们将覆盖用于创建新窗口的键绑定.将其添加到您的~/.screenrc文件中:

bind c screen bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash'
bind ^C screen bash -ic 'HISTFILE=~/.bash_history.${WINDOW} bash'
Run Code Online (Sandbox Code Playgroud)

现在,无论何时创建新的屏幕窗口,它实际上都会启动一个bash shell,将HISTFILE环境变量设置为包含当前屏幕窗口的数字($WINDOW)的内容.

命令历史文件将在具有相同窗口编号的屏幕会话之间共享.

将命令写入$HISTFILE执行

与正常的bash行为一样,历史记录仅$HISTFILE在退出shell/screen窗口时写入文件.但是,如果你想命令写入之后执行的命令,从而立即与同一窗口数量等屏幕会话,您可以添加这样的事情你对历史文件~/.bashrc的文件:

export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"
Run Code Online (Sandbox Code Playgroud)


che*_*ner 7

screen不会保留您键入的命令的历史记录.你的shell可能会也可能不会保留历史记录.由于您似乎使用bash,您可以使用该history命令.

screen看起来似乎有一个粗略的历史搜索近似值(它只是在回滚缓冲区中搜索命令行.请参阅screen"history"命令下的手册页(C-a {默认绑定).