logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 27-12-2021 15:17:31

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

historique des terminaux confort d'utilisation

Hello
J'ai cherché sur le net un peu partout et je n'ai pas trouvé de solution satisfaisante
Je vous explique le soucis
Il m'arrive d'ouvrir plusieurs terminaux , un pour afficher une page man par exemple et un autre pour passer mes commandes
Je vais essayé d’être clair
soit un terminal term1 et un autre ouvert term 2

je passe en root sur term1 , ayant besoin de consulter l'history de l'user je passe la commande sur term2
Et la pas moyen d'avoir les derniéres commandes car elles ont été passé sur term1 quand j'étais en user
J'ai activé la recherche alphabétique via la touche du haut (voir dans le wikidf ), mais cela ne change rien
Pourtant si je consulte le fichier les commandes sont bien enregistré
J'ai bien trouvé une bidouille mais c'est pas le top, intégré dans un script ça devrait faire l'affaire faute de mieux hmm

cat ~/.bash_history|grep -v '#'


c'est pas urgent mais si quelqu'un a une astuce de parametrage faite moi le savoir merci.gif

en exemple cela donne term1 et term2 ouvert
term1 :

echo ploum



term2:

history


aucune trace de echo ploum dans mon listing d'historique
si je passe une serie de commandes  sur le  term1 rien n’apparaîtra dans l'history du term2
Apparamment c'est le comportement normale de tout les terminaux j'ai essayé xterm idem
j'ai essayé guake en VM , sur un ecran spliter super de pas pouvoir lire les commande passé big_smile


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#2 27-12-2021 16:48:00

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : historique des terminaux confort d'utilisation

Salut!

Ce n'est pas propre au terminaux, c'est propre à ton shell (bash j'imagine).
Par défaut, bash modifie le fichier d'historique ($HISTORYFILE) qu'à la fermeture et ne le charge qu'à l'ouverture.
Sachant que ta session n'est pas fermée quand tu changes d'utilisateur, le fichier d'historique n'est pas mis à jour.

man bash :

When a shell with history enabled exits, the last $HISTSIZE lines are copied from the history list to $HISTFILE

PROMPT_COMMAND
              If this variable is set, and is an array, the value of each set element is executed as a command prior to issuing each primary prompt.  If this is  set
              but not an array variable, its value is used as a command to execute instead.



history --help :

-a    ajoute les lignes d'historique de cette session au fichier d'historique

-r    lit le fichier d'historique et ajoute le contenu à la liste d'historique



Pour exécuter la commande  "history -a" devant chaque commande, tu peux ajouter ça à ton ;bashrc:

PROMPT_COMMAND='history -a'



Si ton terminal 2 est déjà ouvert, pour rafraîchir l'historique :

history -r

Dernière modification par David5647 (27-12-2021 16:52:23)

Hors ligne

#3 27-12-2021 17:51:52

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : historique des terminaux confort d'utilisation

ah j'ai oublié de préciser j'avais déja essayé cette méthode
Puis du coup c'est toujours en place vu que pour activer la recherche alphabétique j'ai appliqué ce qui est dit dans le wiki
https://debian-facile.org/doc:programma … -commandes
j'avais même vu sur  le net qu'il fallait exporté la variable mais c'est pas mieux
http://northernmost.org/blog/flush-bash … h-command/
Mais d'apres ce que j'ai pu constater le fichier est  bien écrit d’où ma bidouille

cat ~/.bash_history|grep -v '#'


je fais une inversion sur l'affichage du grep car sinon je me retrouve avec la date en + qui n'est pas interprété dans cat, mais sur une installation de base la date n'y est pas
y'a genre un numéro au dessus de chaque commande

#1640625385



numéro qui correspond a la date

date +%x-%X -d @1640625385



edit:
super

history -r


puis

history


fonctionne au poil, mais je suis pas plus avancé

Dernière modification par Croutons (27-12-2021 18:51:06)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#4 27-12-2021 21:38:40

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : historique des terminaux confort d'utilisation

Faudrait que tu postes ton .bashrc ou la partie du .bashrc qui concerne l'historique
Je comprends pas bien l'histoire de dates, je n'ai pas de date dans mon fichier d'historique, voir ton $HISTTIMEFORMAT donc
Et je sais pas à quel point ta "recherche par ordre alphabétique" peut interférer, j'ai pas testé.

Pour améliorer un poil le truc, tu peux sauvegarder et recharger l'historique à chaque commande :

PROMPT_COMMAND=('history -a' 'history -r')

(faut quand même taper une commande, même vide, pour pouvoir le recharger)

(Pour faire une recherche dans mon historique j'utilise ça https://github.com/junegunn/fzf (c'est dans les dépôts))

Hors ligne

#5 28-12-2021 11:05:10

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : historique des terminaux confort d'utilisation

a oui j'ai les dates d'affiché
export HISTTIMEFORMAT="%d/%m/%Y %H:%M:%S "

cat ~/.bashrc


# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

#Ajout date à l'historique
export HISTTIMEFORMAT="%d/%m/%Y %H:%M:%S "

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
  # We have color support; assume it's compliant with Ecma-48
  # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
  # a case would tend to support setf rather than setaf.)
  color_prompt=yes
    else
  color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
PATH=$PATH:/home/stephane/.local/bin

# appel alphabétique commandes
# shopt -s histappend (déja activé plus haut)
 PROMPT_COMMAND='history -a'
 


Pour ce qui concerne fzf je comprend pas tout dans son fonctionnement, je connaissais son existence on en avait parlé des commandes alternative
https://debian-facile.org/viewtopic.php?id=30246
https://github.com/ibraheemdev/modern-unix
Pour l'insatnt j'ai testé exa et tldr
Pour fzf ce qui serait pas mal peut etre , en commentant HISTTIMEFORMAT dans mon .bashrc

history | sed 's/^[ ]*[0-9]\+[ ]*//'| fzf --tac --no-sort


mais ceci s'appuie toujours sur history
En admettant que j'utilise fzf si je fais un echo polo dans term1 , je fais comment avec fzf pour le retrouver dans mon term2?
fzf me parait pas simple :(

Dernière modification par Croutons (28-12-2021 11:15:19)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#6 28-12-2021 14:15:48

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : historique des terminaux confort d'utilisation

re du coup voila ou j'en suis j'ai ajouté 2 scripts dans /usr/local/bin/
alternative de recherche dans l'historique avec fzf

cat /usr/local/bin/hist


#! /bin/bash
#affichage history avec recherche fzf , fzf doit etre installé
#ceci est un test, voir a l'usage si il faudrait pas ajouter l'option -e (exat match) pour fzf
#Bash désactive l'historique dans les shells non interactifs par défaut, mais vous pouvez l'activer.
#https://qastack.fr/unix/5684/history-command-inside-bash-script

HISTFILE=~/.bash_history
set -o history

history | fzf --tac --no-sort
 



un affichage de l'historique total de l'user

cat /usr/local/bin/histt


#!/bin/bash
#script pour lire l'historique de l'user

cat /home/stephane/.bash_history|grep -v '#'

Dernière modification par Croutons (28-12-2021 15:08:26)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#7 28-12-2021 18:24:28

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : historique des terminaux confort d'utilisation

Hello,

Pour histt, un simple alias dans le ~/.bash_aliases aurait suffit wink

Ici : https://forum.ubuntu-fr.org/viewtopic.p … #p22479821
Il y une méthode intéressante de sauvegarde et de recherche de l'historique bash.
Le principe :
    - Définir une taille de fichier historique assez grande pour contenir 1 mois d'utilisation
    - Sauvegarder l'historique tous les mois
    - Ajouter la fonction "hg" (possible de l'appeler autrement) de recherche
Le tout automatiquement.
J'ai appliqué chez moi cette solution, elle est très pratique.
Je suis même allé plus loin, en bidouillant mon .bashrc, j'enregistre toutes mes sessions consoles (avec une limite en nombre et en taille totale). Sympa pour retrouver un retour wink

Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#8 29-12-2021 11:26:40

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : historique des terminaux confort d'utilisation

Tawal a écrit :

Pour histt, un simple alias dans le ~/.bash_aliases aurait suffit


sauf que après c'est un peu plus dur pour améliorer le bidouillage

bon j'ai changé le script pour que ma sélection de recherche soit exécuté en sortie de fzf

#!/bin/bash
result=$(grep -v '#' ~/.bash_history|fzf --tac --no-sort)
$result

Dernière modification par Croutons (01-01-2022 09:40:04)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#9 29-12-2021 19:41:03

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : historique des terminaux confort d'utilisation

Hello
Mise en place d'un plugin fzf pour l'historique ça marche super smile
prérequis avoir installé fzf bien sur

apt install fzf


trouvé sur github
https://github.com/4z3/fzf-plugins#history-execbash

Il faut cloner le git et ajouter les lignes qui vont bien dans le ~/.bashrc
c'est expliqué dans le README du lien
Par contre la ou c'est mal expliqué c'est qu'il faut aussi activé le key_bindings pour bash .
Il faut lire dans un fichier doc

cat  /usr/share/doc/fzf/README.Debian


Bash
====

Append this line to ~/.bashrc to enable fzf keybindings for Bash:

   source /usr/share/doc/fzf/examples/key-bindings.bash



donc en résumé:

git clone https://github.com/4z3/fzf-plugins ~/.fzf-plugins



nano ~/.bashrc


On ajoute ses lignes au fichier

# First load fzf stuff as usual.
[ -f ~/.fzf.bash ] && source ~/.fzf.bash

# Then configure and load this plugin.
FZF_CTRL_R_EDIT_KEY=ctrl-e
FZF_CTRL_R_EXEC_KEY=enter
source ~/.fzf-plugins/history-exec.bash
source /usr/share/doc/fzf/examples/key-bindings.bash



Voila la recherche sur history avec fzf est activé
Ctrl+r lance une recherche
J'ai pas encore trouvé a quoi peu servir le fichier .fzf.bash qui est absent sur mon PC scratchhead.gif

Dernière modification par Croutons (29-12-2021 19:45:32)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#10 29-12-2021 20:55:13

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : historique des terminaux confort d'utilisation

Ok, cool que tu ai réussi l'install, ça fassait longtemps que j'avais installé tout ça, j'ai pas eu le temps de m'y repencher.
Mon fichier .fzf.bash contient les lignes que tu as rajoutées dans dans .bashrc, il est juste "à part", puis appelé dans mon .bashrc

Hors ligne

#11 29-12-2021 21:39:24

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : historique des terminaux confort d'utilisation

il est juste "à part", puis appelé dans mon .bashrc


C'est mieux ainsi amha.
Combiné avec le test -f, il est facile de désactiver cette spécificité en renommant le fichier.


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#12 30-12-2021 08:50:20

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : historique des terminaux confort d'utilisation

oki m'en va changer ça smile
faire une copie du /usr/share/doc/fzf/examples/key-bindings.bash par la même occasion

edit:

ls ~/.fzf


key-bindings.bash



cat ~/.fzf.bash


# Then configure and load this plugin.
FZF_CTRL_R_EDIT_KEY=ctrl-e
FZF_CTRL_R_EXEC_KEY=enter
source ~/.fzf-plugins/history-exec.bash
source ~/.fzf/key-bindings.bash
#source /usr/share/bash-completion/completions/fzf
#pas compris le fonctionement du bash-completion fzf , il faut peut être désactivé la completion de base
echo CTRL-T fzf ~~ CTRL-R fzf_history ~~ ALT-C fzf_cd

Dernière modification par Croutons (30-12-2021 11:05:33)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#13 30-12-2021 17:30:45

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : historique des terminaux confort d'utilisation

Oui, je trouve cela mieux ainsi.
Mais pour la copie de key-bindings.bash, ça se discute.
Car en cas de mise à jour fzf avec une modification de ce fichier, tu devras refaire la copie.
Dans ton ~/.fzf.bash, tu peux sourcer directement le fichier /usr/share/doc/fzf/examples/key-bindings.bash. Et donc avoir toutes les mises à jour effectives de fzf sans aucune manipulation.

Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#14 30-12-2021 20:50:55

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : historique des terminaux confort d'utilisation

ah oui bien vu smile

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

Pied de page des forums