4

Я ищу способ заставить midnight commander делиться своей историей подоболочек с родительской оболочкой. Более конкретно, когда я запускаю mc , открываю его подоболочку, используя Control+o, и затем вызываю команду в подоболочке, эта команда не доступна во внешней истории оболочки после выхода из mc . Есть ли способ поделиться историей между двумя оболочками? Я запускаю mc из bash , если это актуально. Благодарю.

2 ответа2

5

Это можно сделать с помощью следующей команды (до запуска mc):

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

Если вы хотите сделать его постоянным, добавьте его в ~/.bashrc . Но это сделает всю историю оболочки глобальной, что не является лучшим. Если вы не хотите этот побочный эффект, то вместо указанной выше следует добавить следующую строку:

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

Объяснение:

PROMPT_COMMAND выполняется непосредственно перед тем, как bash отобразит приглашение. Дальнейшее чтение здесь.

history должна вызываться с параметром добавления, а после этого с параметром чтения. Дальнейшее чтение здесь.

1

По какой-то причине решение PROMPT_COMMAND в псевдониме mc , предложенное пользователем szkj, не работает правильно для меня. Хотя он сохранил команды, выполняемые в подоболочке MC, команды, введенные до запуска 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .