#1 Le 18/05/2018, à 20:08
- iro
[Impossibe/Contourné] Commande 'history' dans .zshrc
Bonjour,
je voudrais supprimer les commandes tapées qui retournent une erreur différante de 0, en gros les erreurs de frappes. Voici mon code qui retourne toujours le retour 0 même en tapant "toto":
VAR1='history|tail -n2|cut -c 4-7' # affiche le numéro de la commande
VAR2=`tail -n 1 ${HISTFILE}|cut -c 16-100|echo $?` # affiche le code retour de la dernière commande
if [[ "$VAR2" != "0" ]]
then
history -d $VAR1
fi
Même si mon code fonctionnait, il ne me supprimerait que la dernière commande erronée. L'idéal serait que le script me supprime toute les commandes retournant une erreur dans l'historique.
Est-ce possible ?
Merci pour votre retour
Dernière modification par iro (Le 21/05/2018, à 19:55)
Aime la vie et vis la vie que tu aimes.
Boinc pour aider la science.
Hors ligne
#2 Le 18/05/2018, à 20:18
- Watael
Re : [Impossibe/Contourné] Commande 'history' dans .zshrc
salut,
attention, VAR1 contient littéralement history|tail..., et pas le développement du pipe.
echo ne prend pas de données sur son entrée standard, donc lui envoyer des données par un pipe est sans effet.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 18/05/2018, à 20:33
- iro
Re : [Impossibe/Contourné] Commande 'history' dans .zshrc
Salut Watael,
j'ai pas tout compris... Les commandes fonctionnent en les tapant dans un terminal. Comment ferais-tu avec un script ?
Aime la vie et vis la vie que tu aimes.
Boinc pour aider la science.
Hors ligne
#4 Le 18/05/2018, à 22:00
- iro
Re : [Impossibe/Contourné] Commande 'history' dans .zshrc
J'ai essayé ça, mais apparement la commande history n'est pas reconnue par le script:
VAR1='history|tail -n2|cut -c 4-7'
VAR2='history|tail -n1|cut -c 16-100|echo $?'
if [[ "`$VAR2`" != "0" ]]
then
history -d `$VAR1`
fi
Aime la vie et vis la vie que tu aimes.
Boinc pour aider la science.
Hors ligne
#5 Le 18/05/2018, à 22:28
- Watael
Re : [Impossibe/Contourné] Commande 'history' dans .zshrc
donne-nous un échantillon représentatif de la sortie de la commande history, s'il te plaît, qu'on valide les commandes, parce que tail -n 2 affiche les deux dernières lignes, pas l'avant dernière ligne !
une variable sert à stocker le résultat d'une commande.
ensuite, je ne sais comment le dire autrement, c'est tellement évident !
$ false
$ echo bla | cat - | echo $?
1
echo ne reçoit rien sur son entrée standard, et surtout pas le code de retour d'une commande ou d'un pipe.
ici, le code de retour est celui de la commande précédente, pas celui du pipe.
EDIT :
en te relisant, « supprimer les commandes tapées qui retournent une erreur différante de 0, en gros les erreurs de frappes », je me dis que tu n'exprimes pas correctement tes intentions (d'où la nécessité de fournir un extrait des données, ET du résultat attendu), et que par conséquent, ton algorithme/code est, lui, faux :
une commande dont le code de retour est différent de zéro n'est pas forcément une faute de frappe.
false retourne 1, pourtant cette commande est valide !
pareil pour un test, qui peut retourner faux alors que sa syntaxe est correcte.
EDIT2 : tu devrais peut-être faire quelques recherches pour activer les capacités de correcteur syntaxique que propose zsh !
Dernière modification par Watael (Le 19/05/2018, à 03:55)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 19/05/2018, à 13:08
- iro
Re : [Impossibe/Contourné] Commande 'history' dans .zshrc
Je suis tombé sur ça qui dit en gros:
Malheureusement, les outils d'historique de Bash n'ont pas d'utilité dans un script.
#!/bin/bash
# history.sh
# Essai d'utilisation de la commande 'history' dans un script.history
# Le script n'affiche rien.
# Les commandes d'historique ne fonctionnent pas à l'intérieur d'un script.bash$ ./history.sh
(pas de sortie)
donc apparemment je ne peux pas me servir de la commande history dans un script. Ca tombe à l'eau
Une commande dont le code de retour est différent de zéro n'est pas forcément une faute de frappe: je ne savais pas.
Je te donne mon zshrc:
# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '~/.zshrc'
# Complétion
autoload -Uz compinit
compinit
# End of lines added by compinstall
## Auto-correction
setopt correctall
## Thème
autoload -Uz promptinit
prompt oliver
neofetch
## Supprimer historique inutile
export HISTCONTROL=erasedups
export HISTCONTROL=ignorespace
## Autosuggestion
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
## Couleur syntaxique
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
export VISUAL='/usr/bin/nano'
export EDITOR="$VISUAL"
J'ai trouvé un moyen pour contourné mon problème en ajoutant un espace avant ma commande grace à HISTCONTROL=ignorespace.
J'ai essayé d'ajouter export HISTIGNORE='COM1:COM2:COM3' mais les commandes ne sont pas ignorées dans l'historique.
Dernier truc la command history -d N (N étant le numéro de la commande à effacer) ne marche pas après fermeture et réouverture du terminal. Une idée ?
Aime la vie et vis la vie que tu aimes.
Boinc pour aider la science.
Hors ligne
#7 Le 19/05/2018, à 14:36
- Watael
Re : [Impossibe/Contourné] Commande 'history' dans .zshrc
en effet, dans les scripts bash, l'historique est désactivé par défaut, mais bash n'est pas zsh (ce sont deux shell différents, compatibles POSIX, mais différents), et je ne connais pas en détail zsh.
je ne suis pas sûr que HISTCONTROL existe en zsh...
history -d N est instantané, il agit sur l'historique courant, il n'est pas nécessaire de démarrer une nouvelle session pour que les changements soient effectifs.
merci pour le .zshrc, mais c'est la sortie de la commande history dont j'ai besoin.
et il faut nous en dire davantage sur tes intentions globales, et plus en détail.
Dernière modification par Watael (Le 19/05/2018, à 14:41)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 19/05/2018, à 15:57
- iro
Re : [Impossibe/Contourné] Commande 'history' dans .zshrc
je ne suis pas sûr que HISTCONTROL existe en zsh...
Si, ça marche avec zsh. La commande tapé avec un espace est bien supprimée du fichier histfile. Par contre, HISTIGNORE n'a pas l'air de fonctionner avec zsh.
history -3
9 history
10 toto
11 commande_a_supprimer
Par exemple ce que j'aurais voulu avec le script, c'est supprimer les commandes 10 et 11. En gros toutes les commandes qui sont erronées, que se soit la syntaxe ou les erreurs de frappes...
history -d 10 ne marche pas chez moi. La commande "toto" reste dans histfile.
history -d 10
10 16:39 toto
11 16:39 commande_a_supprimer
history -3
9 history
10 toto
11 commande_a_supprimer
Aime la vie et vis la vie que tu aimes.
Boinc pour aider la science.
Hors ligne
#9 Le 19/05/2018, à 16:45
- Watael
Re : [Impossibe/Contourné] Commande 'history' dans .zshrc
je découvre avec toi.
history est une sorte d'alias pour fc -l.
or, fc ne semble pas disposer d'option de suppression, et l'option -d, elle, ne fait qu'afficher l'heure à laquelle la commande a été exécutée.
pourquoi parser la sortie de history, et pas le fichier d'historique ?
et autant vérifier les fautes de frappes est facile (la commande existe ou pas), autant vérifier la syntaxe va être plus complexe.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 20/05/2018, à 12:38
- iro
Re : [Impossibe/Contourné] Commande 'history' dans .zshrc
Je ne connaissais pas la commande fc, donc mon script n'est pas réalisable..
je me contenterais de l'espace avant la commande.
Merci pour ta contribution
Aime la vie et vis la vie que tu aimes.
Boinc pour aider la science.
Hors ligne