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
lscommande devrait être
ls nonexistentfile, mais elle s'exécutelsetnonexistentfilecomme des commandes distinctes.
Une idée sur ce que je devrais ajuster dans la commande, ou comment procéder?
ls #$CODE, ll #$CODEla 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