midnight commander
がそのサブシェル履歴を親シェルと共有する方法を探しています。具体的には、mc
を起動するときに、を使用してサブシェルを開きます。 Control+o その後、サブシェルでコマンドを呼び出します。このコマンドは、mc
を終了した後、外部シェル履歴では使用できません。 2つのシェル間で履歴を共有する方法はありますか?必要に応じて、mc
からbash
を開始します。ありがとう。
これは、次のコマンドで実行できます(mcを開始する前)。
export Prompt_COMMAND="history -a; history -r"
永続的にしたい場合は、~/.bashrc
に追加する必要があります。しかし、それはすべてのシェル履歴をグローバルにしますが、これは最善ではありません。この副作用が望ましくない場合は、上記の行の代わりに次の行を追加する必要があります。
alias mc='Prompt_COMMAND="history -a; history -r" mc; history -r'
説明:
Prompt_COMMAND
は、bashがプロンプトを表示する直前に実行されます。さらに読む ここ 。
history
は、appendパラメーターを使用して呼び出し、その後、readパラメーターを使用して呼び出す必要があります。さらに読む ここ 。
何らかの理由で、ユーザーszkjによって提案されたmc
エイリアスのPrompt_COMMAND
ソリューションは、私にとって正しく機能しませんでした。 MCサブシェルで実行されたコマンドは保持されましたが、MCを開始する前に入力されたコマンドは終了後に失われました。
最後に、mc
エイリアスなしで、~/.bashrc
で以下を使用します。 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