top | item 29060130

(no title)

anardil | 4 years ago

You can take this even further by rewriting bash functions at runtime if you like. `declare` gives you direct access to the function body

https://www.anardil.net/2018/dynamic-shell-scripting.html (self plug)

discuss

order

travisbhartwell|4 years ago

Woah, this is very cool. I may try to adopt this.

I recently discovered, similar to the author of the post for this thread, that local variables are dynamically scoped.

I have been writing a lot more shell scripts lately, using a "library" [1] of sorts I've been writing. When I was debugging one of my scripts that uses mycmd, I discovered that I had failed to declare some of my variables local and they were leaking out to the global scope.

I had recently added functionality to call a set of functions on script exit, so I added something that would output the defined variables, in hopes that I could write something that will output them at the beginning and then the end and show the difference. I was surprised when variables defined in my dispatch function [2] for those at exit functions were showing up, even though they were definitely defined as local. It was then that I dug around and discovered the dynamic scope of variables.

I've been trying to figure out how to accomplish what I desire but exclude those variables from calling functions. I haven't been able to find an obvious way to see if the variable is coming from a calling function. I might be able to use techniques like you've pointed out in your linked post to add the tracing that I want. Still need to think more on this.

---

[1] https://github.com/travisbhartwell/mycmd [2] https://github.com/travisbhartwell/mycmd/blob/main/shell/myc...