Chet Ramey wrote:
Douglas Moyes wrote:
I nearly brought down a server today.
# alias d="perl-script "
....
# d() {
# perl-script $1 |grep something|cut -d ' ' -f 3
# }
# d something
..... ..... .... CRASH
turns out bash went into a loop calling d over and over again, which
resulted in thousands of grep, bash, and -d processes being executed. It
wasn't pretty.
You defined `perl-script' as a recursive function (alias expansion is
performed when a function is defined) and called it. I'm not surprised
at the result.
Chet
So... what you're saying is that this:
# alias d="dh-machine "
# d() {
# dh-machine $1 |grep something|cut -d ' ' -f 3
# }
became this:
# alias d="dh-machine "
# dh-machine() {
# dh-machine $1 |grep something|cut -d ' ' -f 3
# }
And bash didn't treat d() as a a unique identifier because it tokenized
d and (), then expanded 'd' as an alias. Okay, I see how that makes the
interpreter simpler, but it's not that intuitive and most likely would
always be an undesired effect. It would be more intuitive if "xxxx() {"
ignored any previous definition of xxxx.