J'écris un script simple pour grep mon historique bash pour trouver une chaîne particulière. Sur la ligne de commande, je peux faire ce qui suit, ce qui fonctionne bien:
history | grep git
Cependant, lorsque je crée un script bash avec la même commande que ci-dessus, history
ne renvoie soudainement rien:
#!/bin/bash
history | grep git
Lorsque je supprime la première ligne #!/bin/bash
, mon script fonctionne à nouveau. Que se passe-t-il ici? Comment puis-je utiliser à l' history
intérieur d'un script bash?
bash
shell-script
command-history
Martin Vegter
la source
la source
bash
utilisateur v3, par simple frustration, haha). Au moins pour Martin, ma solution m'a été d'une grande aide, c'est (au moins) un réconfort.Lorsque vous exécutez un script shell bash, par exemple en exécutant un fichier exécutable dont la ligne shebang est
#!/bin/bash
, le script est exécuté dans un shell non interactif. L'une des caractéristiques d'un shell non interactif est que l'historique est désactivé. Donc, si vous voulez que votre script puisse utiliser l'historique, vous devez faire quelque chose comme ceci:Bien sûr, dans ce cas, vous auriez pu faire:
Étant donné que les deux éléments ci-dessus nécessitent que le fichier historique (
~/.bash_history
) soit à jour, ce qui ne sera certainement pas le cas.Je ne sais pas comment vous exécutez votre script après la suppression de la ligne shebang. La recherche du fichier (par exemple, avec
.
) est pas la même chose que l'exécution du script car les commandes s'exécutent dans le shell actuel, qui a l'historique activé.la source
history -a
juste après la commande set pour vous assurer que les dernières commandes sont ajoutées au fichier en premier?