csh scripts seem to be the classic example. Beware of anything that says
source file1 source file2 do this source file3 do that
where the csh files you are source'ing mainly act by setting up environment variables, but also may act by side effects such as cd'ing.
Why do I hate these things? They are hard to automate. Especaly to automatically test.
Really, to automate I need to insert checks into the script above after each step. At least if it is flakey. (If it is not flakey and is all working, I don't care what it does. As long as I can put t in a black box, and don't have to let its side effects escape.)
Why do I hate these things?
So often the are designed for interactive use. And interfere with other stuff you may be using interactvely.
Oftentimes I need to fall back to re,oving all of my interactive customizations to get something like this working in a clean environment.
I have a script I call clear-env that deletes environment variables, and starts up new subshells. Has saved my bacon many times
However, today I am running into problems that depend on running exactly the sit standard initialization files, .login and .cshrc, before running any other csh-&**^&**^&^-source modules.