Une façon vous pouvez aller à faire est la suivante:
Faire une fonction zsh qui appelle fc -R
après la fin de l'exécution d'une certaine commande comme suit:
function rb_yourprogram {
ruby /path/to/your/program.rb && fc -R
}
Dans Ruby, ajoutez à la fichier ~/.zsh_history
:
File.open("~/.zsh_history", "a") do |f|
f.puts "adds this line to history"
end
maintenant, vous pouvez appeler le programme en tapant rb_yourprogram
dans zsh, et après la fin e xecuting chargera le fichier d'historique et aura donc cette nouvelle ligne d'historique (en plus de tout ce qui est écrit dans d'autres instances de zsh depuis que vous avez ouvert le premier shell).
Vous pouvez également surcharger la commande ruby
dans zsh afin qu'il appellera toujours fc -R
après avoir terminé l'exécution:
function ruby {
builtin ruby "[email protected]" && fc -R
}
Un processus enfant ne peut pas modifier l'environnement de son parent (voir par exemple https://stackoverflow.com/a/263022/2088135) –
Je ne suis pas sûr que cela soit possible, car il existe un fichier '' .zsh_history'' mais il est seulement chargé au démarrage; le shell actuel ne fait pas référence à tout, il garde juste son historique en mémoire. Si vous ouvrez un nouveau terminal et exécutez quelque chose, il ne sera ajouté à aucun shell ouvert. À moins qu'il y ait une fonction zsh, vous pouvez appeler pour ajouter quelque chose à la mémoire de tous les shells ouverts (ou au moins un seul shell ouvert), vous pourriez ne pas avoir de chance. – Piccolo
@piccolo Je pourrais lancer 'fc -R' pour recharger un Zshell modifié, mais je pense que nous sommes de nouveau dans le même problème, non? –