On 5/23/07, Sander van Dijk <[EMAIL PROTECTED]> wrote:
Have you seen any language that make calls to tr, sed, awk, cut, cat, etc.? Of course not. One could abuse the system() call of C to do that, but that would just be stupid. Then why do we continuously do this with the shell? Because the original purpose of the shell was to act as _programglue_. The basic idea behind the UNIX userland was to create a lot of small, specialized programs (somewhat like functions), all using a standard interface for communication (stdin/stdout), and then use a "top-level" program (the shell) to make them interact. The shell should do as much as it has to to perform that function, but no more than that. Things like test, echo, kill, printf, fall completely outside its scope. The shell's function is to tie programs together, not to be an all encompassing programming language. Trying to promote sh(1) to that is stupid, you could then just as well use java/python/ruby whatever you prefer.
Of course. You misunderstood me just like Anselm did. I wasn't arguing against the glueing funcionality. Instead I talked about that logic needed to be in the language. Shell is something more than glue. If it was just a glue, you could use pipe. It is on the other hand quite normal interpreted language. Therefore it makes sense to imlement logic testing in the core. That's what I am talking about.
On the other hand kill, echo and other programs like this should of course > be outside the shell. Yes, and test with that. The if/then/else mechanism belongs in the shell, the test itself (whether it is succes or failure of sleep, cat, cut, vi, or test doesn't matter) should _not_ be part of the shell.
I disagree. There is a line between purity and sanity. Forking to see whether two variables equal _is_ stupid. No other language does this. And shell _is_ a language. It would make sense only if the forking had no overhead. But it's quite the other way around.
But I believe this is not about UNIX philosophy, but about designing a clean > and effective language (even a shell) and keeping everything that is not a > part of the language itself in external libraries/programs. Indeed, and like I said, the test itself belongs outside the shell. "test" doesn't even come close to covering the things you could possibly want to test anyway.
Of course it doesn't comprise everything. But I do believe logic and arithmetic tests cover 99% of the conditions in the if statement. That's the reasoning behind this. Regards, Marek
