L'historique est une commande intégrée au shell que je ne pouvais pas utiliser dans un script BASH. Alors, existe-t-il un moyen d'y parvenir en utilisant le script BASH?
Ici, nous allons mon script pour vous:
#!/bin/bash
history | tail -100 > /tmp/history.log
cd /tmp
uuencode history.log history.txt | mail -s "History log of server" hello@hel.com
la source
histtest.sh: 5: set: Illegal option -o history
sh
tiret est à en juger par la formulation exacte du message d'erreur). Pour accéder à l'historique de bash, vous devez utiliser bash (script commençant par#!/bin/bash
ou#!/usr/bin/env bash
).Illegal option
(il diraitset: history: invalid option name
).set -o history
à l'historique qui va ensuite être bourré d'entrées commeif [...
vars=$(...
etc.set -x
c'est beaucoup plus utile.Je ne sais pas s'il utilise réellement la capacité d'historique lors de l'exécution de manière non interactive, sinon chaque script shell que vous exécutez encombrerait votre historique de commandes.
Pourquoi ne pas aller directement à la source
${HOME}/.bash_history
, remplacerhistory | tail -100
partail -100 ${HOME}/.bash_history
. (Si vous utilisez des horodatages, vous devrez probablement faire quelque chose dans le sens degrep -v ^# ${HOME}/.bash_history | tail -100
).la source
greq -v '^#[0-9]\+$'
(history
et la sortie de lagrep
méthode ...history -a; history -c; history -r
. (ajouter, effacer, lire)Si vous souhaitez utiliser la sortie de la
history
commande à partir d'une session shell active dans un script, vous pouvez utiliser un alias pour exécuter la commande en premier. Ensuite, dans le même alias, vous pouvez appeler le reste du script. Avec une telle configuration, vous pouvez obtenir essentiellement le même résultat que d'avoir lahistory
commande dans le script réel.Par exemple, vous pouvez créer un alias comme celui-ci, en supposant que le nom du script est script.sh:
Et changez le script en ceci:
J'ai trouvé cette question lors de l'écriture d'un processus pour combiner, trier et synchroniser des
~/bash_history
fichiers sur deux ordinateurs, il sera donc facile de rechercher les commandes que j'ai utilisées dans le passé.Il est beaucoup moins compliqué de mettre à jour mon fichier d'historique cumulatif sans avoir à se connecter à un nouveau shell pour l'avoir
~/bash_history
mis à jour. Pour surveiller un serveur, cela ne fonctionnera évidemment pas, comme mentionné dans les autres réponses.Mon utilisation en particulier est:
Le script
hby.sh
extrait ensuite toutes les entrées uniques de tous les~/.bash_history*
fichiers.la source
L'historique intégré semble être désactivé dans un script shell. Voir ici: http://www.tldp.org/LDP/abs/html/histcommands.html
Je n'ai trouvé aucune documentation officielle à ce sujet.
la source
Créez un script nommé
script.sh
comme ci-dessous. Il crée un script nommé X et y met Y Nombre de lignes de votre historique.Ensuite, si vous souhaitez créer un script pour accomplir une tâche nommée "tâche" sur laquelle vous avez travaillé pendant les 14 dernières lignes exécutées
Ensuite, nettoyez votre historique pour faire un joli script!
la source
histtest.sh: 5: set: Illegal option -o history
La commande history est désactivée par défaut sur le script bash, c'est pourquoi même la commande history ne fonctionnera pas dans le fichier .sh. pour sa redirection, veuillez rediriger le fichier bash_history à l'intérieur du fichier .sh.
ou le mécanisme d'historique peut également être activé en mentionnant le fichier d'historique et en modifiant les paramètres d'exécution comme indiqué ci-dessous
note: mentionné ci-dessus deux lignes en haut du fichier script. maintenant la commande history fonctionnera dans l'histoire.
la source
Chaque utilisateur possède son propre fichier d'historique qui est le résultat de la commande d'historique.Au lieu d'utiliser la commande d'historique dans votre script shell, vous pouvez utiliser le fichier d'historique pour l'utilisateur. Il y aura un
.bash_history
fichier dans le répertoire personnel de l'utilisateur, qui sera le fichier historique de l'utilisateur.la source
Réponse courte :
à utiliser
history -p
pour effectuer explicitement l'expansion de l'historique.Un exemple suit.
Un cas d'utilisation qui se produit souvent pour moi est:
Depuis que mon bash a été
set -o histexpand
, généralement ce que je faisais est de taperpour modifier les fichiers répertoriés par la commande précédente.
Malheureusement, il arrive parfois qu'une erreur se produise, donc j'active la vérification par
shopt -s histverify
.Maintenant, je peux vérifier l'extension, avec le coût d'une Returnclé supplémentaire .
Aujourd'hui, je veux envelopper ces détails dans une fonction bash car je les utilise beaucoup,
Ici, j'utilise deux imbriqués
command substitution
, celui interne pour développer la!!
commande précédente, celui externe pour l'exécuter et obtenir la sortie.Maintenant, je peux obtenir le même effet, avec seulement trois touches, et l'une d'elles est Return!
la source