On Tue, 07 Apr 2009 15:58:34 -0400, grauzone <[email protected]> wrote:

The complete language reference (including index) has 102 pages. Considering that it's probably more formal than the sh description in your Nutshell book, it's not that much compared to sh.

The nutshell description is formal and complete for bourne/korn shell (it does not have any bash extensions), which mostly sufficient for everything.

Regarding the syntax: OK, that's probably about tastes. But I still like it more than, say, the funny way how you have to use the find program.

It depends on what you want to get used to.  I agree it's about tastes.

And regarding using it as an user shell: there's an interactive command line interpreter.
if you type ls, does it work, or do you have to type __run__("ls") or whatever?

If you'd go and use python as a shell, you had a ls() function. It would return an array of names. Instead of text garbage like ls does. How can you reliably list all files, without getting incorrect results (like when there's a line break in a file), or falling into the escape trap (your script, that takes the ls output, interprets part of the filename as program)?

You can use the shell's filename wildcard feature to get an array of filenames that are properly delineated.

For example:

for file in *
do
  echo filename is: $file
done

Will print out individual files, including ones that have escape sequences or spaces. echo re-interprets newlines as spaces, so you won't see those exactly, but the file variable does contain the exact characters.

Prove me wrong, show me a python script that does the same thing, and we'll see if it's clearer.

Sorry, I'm not going to write a script to prove someone else wrong over the internet. And my point was anyway to extend a _real_ scripting language by adding simple functions as substitutes for common UNIX programs like rm, ln etc.

what happens when you want to run non-standard programs, then do you have to run them using a python function? I imagine that simply interpreting any symbol that doesn't match a library function as a command to run might result in a lot more collisions in python than in sh.

sh scripts aren't very reliable either. I remember that script that invoked another program. That other program produced some warning, and the script interpreted it as normal output.
Oh yeah, that *must* have been the scripting language's fault. I have bugs in my D programs too, must be because D sucks?

Interpreting data as programs are the "buffer overflows" of scripting languages. Nothing to defend here. The script in question was relatively large, and probably written by some guru, if that helps.

All I was saying is that bugs can occur in any programming or scripting language. Blaming the language isn't the answer (although complicated scripts in any language you are not familiar with certainly can be hard to debug).

Yeah, or doing something like "rm -rf this/directory /". Or deleting all hidden directories.

That demonstrates a particularly disgusting issue with the shell: escape hell.

One time, I unzipped a file, and the files were encoded with some weird multibyte garbage. How do I delete the files? I had to start a GUI program to do this. In Python, with an appropriate extension library, that would have been ls() followed by a rm(ls[1]). How to do this in sh?

I'm assuming you had an issue because those files were intermixed with files you wanted to keep?

for file in *
do
  echo Do you want to remove file $file?
  read answer
  if [ "$answer" = "y" ]
  then
    rm "$file"
  fi
done

or something like that would have worked.

-Steve

Reply via email to