Puis-je rechercher facilement mon historique dans de nombreuses fenêtres d'écran?

11

Ma screensession actuelle comporte 12 fenêtres ouvertes. Cela fonctionne depuis des semaines ... Je sais que j'ai exécuté une convertcommande ImageMagick dans l' une de ces 12 fenêtres d'écran la semaine dernière ... Existe-t-il un moyen de rechercher facilement dans l'historique Bash des 12 instances, sans les fermer ni exécuter history | grep convertdans les 12 écrans?

Josh
la source
1
J'utiliser zsh et je setopt share_historyen /etc/zsh/zshrcsi ce problème ne devrait jamais arriver à moi: P
phunehehe

Réponses:

18

Vous pouvez exécuter history -a; history -cdans toutes les fenêtres pour enregistrer l'historique. Et puis history -rpour le rafraîchir.

Pour le résoudre de manière plus permanente, ajoutez ceci à votre .bashrc:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Gert
la source
2
C'est super, merci! Le seul problème est que si vous tapez quelque chose dans un shell puis allez dans un autre et tapez immédiatement l'historique, il n'apparaîtra pas dans l'historique. Cela est dû au fait que PROMPT_COMMAND n'a pas encore été exécuté, donc l'actualisation n'a pas eu lieu. Vous devrez d'abord appuyer sur Retour dans la deuxième fenêtre (ou exécuter une autre commande), puis saisir l'historique.
Javid Jamae
1

Cela semble difficile. Voici quelques méthodes qui peuvent vous convenir.

Si vous avez installé des outils de comptabilité des processus (sous Linux, recherchez un package appelé acct) et l'autorisation de les utiliser, vous pouvez savoir quand et éventuellement sur quel terminal vous avez exécuté convert:

lastcomm convert

Si cela n'est pas disponible ou n'est pas concluant, vous pouvez exécuter une historycommande dans chaque instance de bash pour rechercher des convertcommandes. Cela trouvera également les commandes qui se trouvaient dans le fichier historique au démarrage de bash.

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)itère sur les numéros de vos fenêtres d'écran. Assurez-vous d'ignorer les fenêtres qui n'exécutent pas actuellement bash mais un autre processus qui interpréterait l'entrée différemment.
  • screen -p $w stuff …envoie la chaîne suivante en entrée à la fenêtre spécifiée. Vous avez besoin de la nouvelle ligne à la fin de la chaîne.
  • Le fichier /tmp/convert.historycontiendra une liste de lignes comme 3 convert foo.jpg, si vous avez exécuté convert foo.jpgdans la fenêtre 3.
Gilles 'SO- arrête d'être méchant'
la source
1
Malheureusement, cela n'a pas fonctionné. :-( Je viens de finir de courir history | grep convertdans toutes les fenêtres. Je suis déçu, je voulais accepter une autre excellente réponse de Gilles!
Josh
1

tcsh vous permet de partager l'historique entre les sessions grâce à l'utilisation de l'alias périodique.

Dans votre fichier .cshrc (ou .tcshrc):

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

Cela exécutera automatiquement la commande d'historique toutes les 60 minutes. Cela permettra d'enregistrer l'historique dans un fichier d'historique commun dans votre répertoire personnel. Pour mettre à jour l'historique plus souvent, réduisez le nombre de périodes ou exécutez simplement la commande "périodique" pour actualiser manuellement

Michael Toth
la source
0

Bash n'écrit l'historique qu'à sa sortie, ce qui rend au mieux cette problématique. J'ai entendu dire que zsh peut partager l'historique entre les sessions actives.

bahamat
la source