Conversion d'horodatages avec awk
Si vous voulez lire le fichier lui-même, pour l'utiliser avec, disons, grep
ou tout autre filtre, vous devez convertir les horodatages.
J'ai créé ce script, que j'ai sauvegardé dans mon /usr/local/bin
et cela fonctionne pour bash y zshell :
script uhistory.awk at /usr/local/bin/uhistory.awk
#!/usr/bin/awk -f
{
if (match($0,/^#/)) # bash
{
nlin++
#adata="@"substr($0,2)
#printf("%s ", adata)
cmdata = "date -d \"@" substr($0,2) "\" +\"%F %H:%M:%S\""
cmdata | getline datado
close(cmdata)
printf("%d %s ", nlin, datado)
}
else
if (match($0,/^:/)) # zshell
{
nlin++
split($0, arr, ":|;")
cmdata = "date -d \"@" substr(arr[2],2) "\" +\"%F %H:%M:%S\""
cmdata | getline datado
close(cmdata)
printf("%d : %s ; %ss % ", nlin, datado, arr[3])
for (i in arr)
{
if (i < 4)
continue
printf("%s ", arr[i])
}
printf("\n")
}
else
{
print $0
}
}
Utilisation Le fichier d'historique est un fichier de base : il est possible de faire passer l'historique par le filtre. Supposons que le fichier historique de zsh
qui a le format :
:timestamp:duration;commands
Sans la uhistory.awk serait le filtre :
% head ~/.config/zsh/zhistfile
: 1570482839:0;la
: 1570482839:0;cd zsh
: 1570482839:0;ls
: 1570482839:1;cat verybigaliasfile.txt
: 1570482839:0;alias
: 1570482839:0;ls -la
: 1570482839:0;vi .zshrc
: 1570482839:0;alias
Avec la uhistory.awk il apparaîtrait comme suit :
% head ~/.config/zsh/zhistfile | uhistory.awk | grep alias
4 : 2019-10-07 18:13:59 ; 1s % cat verybigaliasfile.txt
5 : 2019-10-07 18:13:59 ; 0s % alias
9 : 2019-10-07 18:13:59 ; 0s % alias
Mais si votre utilisation n'implique pas de traiter le fichier lui-même, vous n'avez besoin que d'un alias.
Ajoutez cette ligne à votre .zsh_aliases
ou tout autre endroit que vous avez prévu pour vos alias.
alias history='fc -il 1'
ou une autre option de fc
commande. Vérifier avec man zshbuiltins
L'idéal est d'utiliser la même commande, afin d'éviter toute confusion au cas où vous souhaiteriez ajouter une autre touche/option à la fin. Dans ce cas, je recommande :
alias history='history -i'
Et bien sûr, vous pouvez simplement envoyer le résultat à l'aide d'un tuyau, par exemple :
% history | grep alias
4 2019-10-07 18:13:59 cat verybigaliasfile.txt
5 2019-10-07 18:13:59 alias
9 2019-10-07 18:13:59 alias
En l'occurrence, durée n'apparaîtra pas, mais le reste est identique.