midnight commander subshel​​l - 与 shell mc 共享历史文件是从哪里启动的

midnight commander subshel​​l - 与 shell mc 共享历史文件是从哪里启动的

我正在寻找一种方法来midnight commander与父 shell 共享其子 shell 历史记录。更具体地说,当我启动,使用+mc打开其子 shell并随后在子 shell 中调用命令时,退出 后,此命令在外壳 shell 历史记录中不可用。有没有办法在两个 shell 之间共享历史记录?如果相关的话,我从 开始。谢谢。Controlomcmcbash

答案1

这可以通过以下命令完成(在启动 mc 之前):

export PROMPT_COMMAND="history -a; history -r"

如果您想让它永久存在,那么您应该将其添加到您的~/.bashrc。但这会使所有 shell 历史记录都成为全局的,这不是最好的。如果您不想要这种副作用,那么应该添加以下行来代替上面的行:

alias mc='PROMPT_COMMAND="history -a; history -r" mc; history -r'

解释:

PROMPT_COMMAND在 bash 显示提示之前执行。进一步阅读这里

history应该使用 append 参数调用,然后使用 read 参数调用。进一步阅读这里

答案2

由于某种原因,用户 szkj 建议的别名PROMPT_COMMAND解决方案mc对我来说不起作用。虽然它确实保留了在 MC 子 shell 中执行的命令,但在退出后,启动 MC 之前输入的命令会丢失。

最后,我在 中使用了以下内容~/.bashrc,没有别名。尽管覆盖了mc,但它似乎工作正常。mc$PROMPT_COMMAND

export HISTCONTROL=ignoreboth
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

这是我得到的:

# echo "1: before starting MC. PROMPT_COMMAND=$PROMPT_COMMAND"
1: before starting MC. PROMPT_COMMAND=history -a; history -c; history -r; 

# mc

# echo "2: Inside MC. PROMPT_COMMAND=$PROMPT_COMMAND"
2: Inside MC. PROMPT_COMMAND=pwd>&8;kill -STOP $$

# history | tail -3
 3038 echo "1: before starting MC. PROMPT_COMMAND=$PROMPT_COMMAND"
 3039 echo "2: Inside MC. PROMPT_COMMAND=$PROMPT_COMMAND"
 3040 history | tail -3

# echo "3: Going to exit MC with F10."
3: Going to exit MC with F10.

# echo "4: Back in Bash after MC"
4: Back in Bash after MC

# history | tail -7
 3038 echo "1: before starting MC. PROMPT_COMMAND=$PROMPT_COMMAND"
 3039 echo "2: Inside MC. PROMPT_COMMAND=$PROMPT_COMMAND"
 3040 history | tail -3
 3041 echo "3: Going to exit MC with F10."
 3042 mc
 3043 echo "4: Back in Bash after MC"
 3044 history | tail -7

我的系统是:

# cat /etc/debian_version 
8.1

# bash --version | head -1
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)

# mc --version | head -1
GNU Midnight Commander 4.8.13

# uname -a
Linux afnet 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04) x86_64 GNU/Linux

答案3

遗憾的是,由于我的声誉还很低,我无法评论之前的帖子,但我真的很想分享一下,在我看来,@mivk 的解决方案即使在现在也很好用('22),ZSH 也使用以下“变异”:

export HISTCONTROL=ignoreboth
#shopt -s histappend # For BASH
setopt APPEND_HISTORY # For ZSH
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

相关内容