Remix.run Logo
pottmi 2 days ago

I am the author of this presentation. Feel free to ask me questions and send me corrections to the pdf and youtube video.

Here is are the slides: http://uniforumchicago.org/slides/bash_2025-03-25.pdf

Here is the recording of the video: https://www.youtube.com/watch?v=DvDu8_A2uhs

Here is the stringent.sh library that is shown in the presentation: https://github.com/pottmi/stringent.sh

PeterWhittaker 2 days ago | parent | next [-]

Great presentation. I've been writing bash for waaaay too long, and, while I nodded and said yup, yup, a few times, I also learned some new tricks, so thank you!

The social graces having been observed, if you were to update this presentation to reflect modern bash, and especially reference variables, what would be your top 3 additions?

(I am a big fan of reference variables. They make it possible to, among other things, do some funky things that would otherwise require liberal use of eval, which I eschew. Figuring out how to ensure that the target of a reference variable was in fact an associative array while running under `set -u` was a trick of which I am proud. Note: what I did works and isn't totally ugly, there may be a better way, YMMV, IANAL, etc.)

Second Q, if you will permit: Given the memory leaks in associative array management that have been corrected over the last several years, what are your thoughts on a) whether or not bash should have ever gone that route, and, potentially more controversially, b) the current state of bash maintenance?

(I'm not going to ask about embedding multiple levels of ${...#...} or ${...#...}, because even if it worked, readability would tend to 0 very, very quickly. I'd rather be repetitive and readable and maintainable. Well. Most of the time.)

pottmi 11 hours ago | parent [-]

I switched to zsh so I have not been paying attention to bash so I don't have a top three things to add. I just add things as I stumble on them.

Thanks for the tip on reference variables. definitely better than eval. i will add that to the presentation.

I will look into using set -u and what I can do with that and add it to the presentation. Perhaps make a companion presentation on debugging bash.

Another good presentation would be on how to use bash safely with sudo. I have a sudo presentation that is pretty good for it is for sudo 1.7 and the current version is 1.9 so I would need to update it before giving it.

I have not used associative arrays in bash. I would probably tend to use python if i needed that capability so I am not likely to use aa in bash soon.

Regarding nesting levels of self modifying variables: Yeah, I tried to do it once and failed and did not try to figure out any tricks to get it to work. I just moved to multiline which is easier to debug and comment on for the poor bastard that has to fix my code.

Scipio_Afri 2 days ago | parent | prev | next [-]

Is there an https link to this pdf? So rare to see http nowadays.

pottmi 2 days ago | parent [-]

I contacted the guys that run the site and asked them to add https.

I will throw the pdf on my gitlab account that has the stringent.sh script.

https://github.com/pottmi/stringent.sh

transpute 2 days ago | parent | prev [-]

Thanks for carrying a 20 year torch on bash maintainability!

pottmi 11 hours ago | parent [-]

It is what I advise people that want to make a presentation to give to their local LUG. Do the presentation on something "evergreen" that will last a long time. File permission, regular expression, /proc file system, ... Dig into the details and anytime you are surprised by something make a new slide. Also make "Cookbook" slides. pretty soon you have 30 slides and it is enough for a full presentation.