Je suis à la recherche d'un moyen de faire en sorte que midnight commander
partage son historique de sous-shell avec le shell parent. Pour être plus précis, lorsque je démarre mc
, ouvre son sous-shell en utilisant Control+o et invoque ensuite une commande dans le sous-shell, cette commande n'est pas disponible dans l'historique du shell externe après avoir quitté mc
. Y a-t-il un moyen de partager l'historique entre les deux shells? Je démarre mc
depuis bash
, si cela est pertinent. Merci.
Réponses
Trop de publicités?Cela pourrait être fait avec la commande suivante (avant de démarrer mc) :
export PROMPT_COMMAND="history -a; history -r"
Si vous souhaitez le rendre permanent, alors vous devriez l'ajouter à votre ~/.bashrc
. Mais cela rendra tout l'historique du shell global, ce qui n'est pas idéal. Si vous ne voulez pas cet effet secondaire, alors la ligne suivante devrait être ajoutée à la place de la précédente :
alias mc='PROMPT_COMMAND="history -a; history -r" mc; history -r'
Explication :
PROMPT_COMMAND
est exécuté juste avant que bash affiche un invite de commande. Pour en savoir plus, consultez ici.
history
devrait être appelé avec le paramètre d'ajout, et ensuite avec le paramètre de lecture. Pour en savoir plus, consultez ici.
Pour une raison quelconque, la solution PROMPT_COMMAND
dans un alias mc
, comme suggéré par l'utilisateur szkj, n'a pas fonctionné correctement pour moi. Bien qu'elle ait préservé les commandes exécutées dans le sous-shell MC, les commandes saisies avant de démarrer MC étaient perdues après la sortie.
En fin de compte, j'utilise ce qui suit dans ~/.bashrc
, sans alias mc
. Cela semble fonctionner correctement malgré le fait que mc
écrase $PROMPT_COMMAND
.
export HISTCONTROL=ignoreboth
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Voici ce que j'obtiens :
# echo "1: avant de démarrer MC. PROMPT_COMMAND=$PROMPT_COMMAND"
1: avant de démarrer MC. PROMPT_COMMAND=history -a; history -c; history -r;
# mc
# echo "2: À l'intérieur de MC. PROMPT_COMMAND=$PROMPT_COMMAND"
2: À l'intérieur de MC. PROMPT_COMMAND=pwd>&8;kill -STOP $$
# history | tail -3
3038 echo "1: avant de démarrer MC. PROMPT_COMMAND=$PROMPT_COMMAND"
3039 echo "2: À l'intérieur de MC. PROMPT_COMMAND=$PROMPT_COMMAND"
3040 history | tail -3
# echo "3: Je vais quitter MC avec F10."
3: Je vais quitter MC avec F10.
# echo "4: De retour dans Bash après MC"
4: De retour dans Bash après MC
# history | tail -7
3038 echo "1: avant de démarrer MC. PROMPT_COMMAND=$PROMPT_COMMAND"
3039 echo "2: À l'intérieur de MC. PROMPT_COMMAND=$PROMPT_COMMAND"
3040 history | tail -3
3041 echo "3: Je vais quitter MC avec F10."
3042 mc
3043 echo "4: De retour dans Bash après MC"
3044 history | tail -7
Mon système est :
# 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