hex*_*ide 20 bash command-line gnu-screen
如果我开始使用屏幕会话screen -dmS name,我将如何使用脚本访问该屏幕会话的命令历史记录?
使用↑,即使在屏幕中也会显示最后执行的命令.
Nat*_*igh 23
我在我的系统上使用默认的bash shell,因此可能无法与其他shell一起使用.
这就是我在~/.screenrc文件中的内容,以便每个新的屏幕窗口都有自己的命令历史记录:
要打开一组默认屏幕窗口,每个窗口都有自己的命令历史记录文件,您可以将以下内容添加到~/.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)
默认屏幕设置意味着您使用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)
screen不会保留您键入的命令的历史记录.你的shell可能会也可能不会保留历史记录.由于您似乎使用bash,您可以使用该history命令.
screen看起来似乎有一个粗略的历史搜索近似值(它只是在回滚缓冲区中搜索命令行.请参阅screen"history"命令下的手册页(C-a {默认绑定).