#26 Le 19/08/2021, à 14:18
- Tawal
Re : Affichage long de history, en savoir plus sur l'historique
Hello (un petit bonjour en plus ne fait pas de mal )
La solution de @MicP du #15 a été mise en place chez moi.
@MicP
J'en ai profité pour apporter 2 améliorations :
rep="~/.logsBashHistory"
devient
rep="$HOME/.logsBashHistory"
et
awk -v timeFormat="$HISTTIMEFORMAT" '{ if($0 ~/^#[[:digit:]]{10}$/) printf strftime(" arch. "timeFormat, substr($0,2,10)); else print $0; }' "${backupPrefix}".* | grep "$1"
devient
gawk -v timeFormat="$HISTTIMEFORMAT" -v rech="$1" '$0 ~ rech { if($0 ~/^#[[:digit:]]{10}$/) printf strftime(" arch. "timeFormat, substr($0,2,10)); else print $0; }' "${backupPrefix}".*
plus de grep et écriture claire de l'utilisation de gawk.
Je crois bien que j'utiliserais de plus en plus l'historique bash
Le savoir n'a d’intérêt que si on le transmet.
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
#27 Le 19/08/2021, à 14:24
- MicP
Re : Affichage long de history, en savoir plus sur l'historique
Merci beaucoup pour le retour
Hors ligne
#28 Le 19/08/2021, à 14:32
- Tawal
Re : Affichage long de history, en savoir plus sur l'historique
Re,
2 autres améliorations :
Mise en place du test de la présence de gawk :
[ $(basename $(readlink --canonicalize $(which awk))) == gawk ] || exit 1 # Test de la présence de gawk sinon exit
Attention dans ton code tu mets un && alors qu'il faut un || (ou changer le == par !=)
Dans la fonction hg, tu utilises $@ en condition dans le case alors que $1 suffit
Le case devient donc :
case $1 in
?|/?|-?|-h|--help|'')
printf "$msg"
;;
*)
gawk -v timeFormat="$HISTTIMEFORMAT" -v rech="$1" '$0 ~ rech { if($0 ~/^#[[:digit:]]{10}$/) printf strftime(" arch. "timeFormat, substr($0,2,10)); else print $0; }' "${backupPrefix}".*
history | grep "$1"
;;
esac
Merci à toi surtout
Edit:
La fonction hg est très pratique pour contrôler l'utilisation de ... sudo
Edit2:
Simplification du test de présence de gawk :
if ! $(hash gawk 2>/dev/null)
then
exit 1
fi
Et ça a l'avantage de "hasher" gawk ==> exécution plus rapide dès son 1er appel
Edit3:
Mise à jour du test de présence de gawk
Bizarrement le test :
[ $(hash gawk 2>/dev/null) ] || exit 1
fait fermer le terminal alors que gawk est bien présent !
D'ailleurs, il n'est pas bon de mettre "exit 1" car en cas de non-présence de gawk, le terminal se referme illico.
Je pense qu'il vaut mieux écrire quelque chose comme ceci :
if $(hash gawk 2>/dev/null)
then
hg ()
{
msg="\n\tDescription\t: hg est un raccourci pour 'history | grep motifRecherché'\n\n"
msg+="\tSyntaxe\t\t: hg motif_recherché\n\n"
msg+="\tLa recherche sera aussi effectuée dans les fichiers history archivés.\n\n"
case $1 in
?|/?|-?|-h|--help|'')
printf "$msg"
;;
*)
gawk -v timeFormat="$HISTTIMEFORMAT" -v rech="$1" '$0 ~ rech { if($0 ~/^#[[:digit:]]{10}$/) printf strftime(" arch. "timeFormat, substr($0,2,10)); else print $0; }' "${backupPrefix}".*
history | grep "$1"
;;
esac
}
fi
On déclare la fonction hg que SI gawk est présent.
Ce qui évite de ne pas pouvoir ouvrir le terminal !
Dernière modification par Tawal (Le 20/08/2021, à 22:49)
Le savoir n'a d’intérêt que si on le transmet.
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
#29 Le 20/08/2021, à 22:56
- Tawal
Re : Affichage long de history, en savoir plus sur l'historique
Hello,
Je reprends dans ce post les edits du message au dessus.
Donc le test :
[ $(hash gawk 2>/dev/null) ] || exit 1
fait fermer le terminal alors que gawk est bien présent !
Et ce avec ou sans double crochet !
Ensuite, le exit est à proscrire car en cas de non-présence de gawk le terminal se referme aussitôt. Pas bien.
Donc je pense qu'il vaut mieux écrire :
if hash gawk 2>/dev/null
then
hg ()
{
msg="\n\tDescription\t: hg est un raccourci pour 'history | grep motifRecherché'\n\n"
msg+="\tSyntaxe\t\t: hg motif_recherché\n\n"
msg+="\tLa recherche sera aussi effectuée dans les fichiers history archivés.\n\n"
case $1 in
?|/?|-?|-h|--help|'')
printf "$msg"
;;
*)
gawk -v timeFormat="$HISTTIMEFORMAT" -v rech="$1" '$0 ~ rech { if($0 ~/^#[[:digit:]]{10}$/) printf strftime(" arch. "timeFormat, substr($0,2,10)); else print $0; }' "${backupPrefix}".*
history | grep "$1"
;;
esac
}
fi
afin de ne déclarer la fonction hg que si gawk est présent.
On garde ainsi l'archivage de l'historique mais on perd la fonction de recherche (qui nécessite gawk).
Vli, vlà, vlou, j'ai rien trouvé de mieux.
Edit:
Autre chose encore :
La commande hg existe dans le paquet "mercurial" (que je connais pas).
Voici le retour que j'ai si la fonction hg n'est pas déclarée : (paquet "command-not-found" nécessaire pour avoir ce retour)
$ hg tata
Command 'hg' not found, but can be installed with:
sudo apt install mercurial
$
Donc à faire attention !
Edit2:
Une erreur dans le code :
HISTSIZE=4000
HISTFILESIZE=2000
Les 2 valeurs sont à intervertir et donc on a :
HISTSIZE=2000
HISTFILESIZE=4000
qui est plus logique.
Perso, j'ai mis les 2 valeurs à 4000, comme ça je suis tranquille et la commande history | grep commande_recherchée recherche dans tout le fichier d'historique.
Mais la valeur "4000" veut aussi dire qu'on ne peut pas sauvegarder plus de 4000 commandes par mois (les 1ères commandes d'un lot de + de 4000 sont perdues !)
Bon faut être un acharné du terminal pour dépasser cette limite mensuelle.
Mais c'est à savoir
Dernière modification par Tawal (Le 20/08/2021, à 23:37)
Le savoir n'a d’intérêt que si on le transmet.
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
#30 Le 06/09/2021, à 21:23
- Tawal
Re : Affichage long de history, en savoir plus sur l'historique
Hello,
Je reviens vers vous pour signaler une erreur de ma part dans le code gawk.
En effet, le gawk actuel affiche bien la commande recherchée mais pas "arch. date heure" avant la commande cherchée.
Voici la ligne gawk modifiée et qui fonctionne :
gawk -v timeFormat="$HISTTIMEFORMAT" -v rech="$1" '{if ($0 ~ rech) { printf(strftime(" arch. "timeFormat, substr(lign_prec,2,10))); print $0 }; lign_prec=$0}' "${backupPrefix}".*
Au plaisir, bien à vous
Dernière modification par Tawal (Le 06/09/2021, à 21:24)
Le savoir n'a d’intérêt que si on le transmet.
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