6 votes

MdpMSBJbiBzaGFyaW5nIGEgaGlzdG9yeSBmaWxlIHdpdGggdGhlIHNob3VsIG1jIHdhcyBzdGFydGVkIGZyb20gdGhlIHNoZWxsIG1jIHdhcyBzdGFydGVkIGZyb20=

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.

7voto

Victor Haydin Points 2311

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.

2voto

ipek Points 141

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X