Je me demande s'il y a un moyen d'utiliser la commande history mais seulement lister les commandes qui ont été exécutées avec succès. De même, y aurait-il un moyen de répertorier ceux qui ont généré des erreurs?
Je sais que chaque commande a un statut de sortie de:
0
- Exécution réussie de la commande
1
- La commande échoue en raison d'une erreur lors de l'expansion ou de la redirection, l'état de sortie est supérieur à zéro.
2
- Utilisation incorrecte de la commande
12
- Commande trouvée mais non exécutable
127
- Commande non trouvée
et peut être vérifié en poursuivant la commande à echo $?
partir de: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
Exemple:
Après avoir exécuté ces 4 commandes:
ls
help
lss
ls nonexistentfile
J'ai essayé de tester pour imprimer uniquement les commandes réussies (état de sortie de 0), qui ne devraient être que «ls» et «help»:
for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; then :; else echo $j | grep -v 'bash'; fi; done; rm cmd_out
Cela produit:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
Cela fonctionne quelque peu, mais il y a deux problèmes:
- Pour une raison quelconque,
grep -v 'bash'
n'exclut pas les lignes contenant 'bash', mais si je le faisgrep 'bash'
, cela n'inclura que les lignes avec 'bash', je ne sais pas pourquoi l'une fonctionne et pas l'autre. - C'est séparer chaque ligne / commande par chaîne. La dernière
ls
commande devrait être
ls nonexistentfile
, mais elle s'exécutels
etnonexistentfile
comme des commandes distinctes.
Une idée sur ce que je devrais ajuster dans la commande, ou comment procéder?
la source
ls #$CODE, ll #$CODE
la sortie de l'historique. Je ne sais pas si cela fonctionne pour vous, mais j'ai dû changersed -i '\$s/\$/ \#\$CODE/' $HISTFILE'
poursed -i '\$s/\$/ \#$CODE/' $HISTFILE
. J'ai pris la sortie avant $ CODE#
(pas de code) sans l'évasion. Doit être un problème de citation.