web-dev-qa-db-ja.com

真夜中の司令官サブシェル-シェルmcとの履歴ファイルの共有はから開始されました

midnight commanderがそのサブシェル履歴を親シェルと共有する方法を探しています。具体的には、mcを起動するときに、を使用してサブシェルを開きます。 Control+o その後、サブシェルでコマンドを呼び出します。このコマンドは、mcを終了した後、外部シェル履歴では使用できません。 2つのシェル間で履歴を共有する方法はありますか?必要に応じて、mcからbashを開始します。ありがとう。

5
AtomHeartFather

これは、次のコマンドで実行できます(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パラメーターを使用して呼び出す必要があります。さらに読む ここ

6
szkj

何らかの理由で、ユーザー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
2
mivk