_____________________________________________________________________ Avijit Ghosh, Ph.D. Drexel University, Dept of Physics Asst. Professor 3141 Chestnut st Phone: 215-895-2726 Philadelphia, PA 19104 Fax: 215-895-5934 Web: http://silicon.physics.drexel.edu On Mon, 13 Dec 2004, William H. Magill wrote: > On 13 Dec, 2004, at 06:22, Russell McGaha wrote: > > > Actually yes and no; I am relatively new to command line programming. > > After I chmoded the file it ran [is running] just fine as a cron job, and > > before I changed my shell to bash, was running just fine as a sourced > > file . > > That is correct behavior. That is the way in which "shell programming" works. > > A couple of Unix concepts (quite generalized, go read a Unix text for more > explicit explanations): > > EVERY file is nothing but a string of characters. It is read starting at the > first byte, that read progresses to the end-of-file. The "thing" reading the > file can be a "program" or an "interpreter," typically called a "shell" -- > tcsh, bash, zsh, ksh and sh all being valid "shells." Perl is another common > interpreter, as are Tcl/tk and Java. > > ANY text file can be "sourced" by any interpreter -- The interpreter reads the > file and if that file contains valid commands for that shell they will be > "executed," that is to say, "interpreted" by the shell. If they are not > "commands" which that interpreter understands, the interpreter will generate > errors. > > If your default shell was tcsh and you "sourced" a file containing tcsh > commands it would work as expected. However, when you changed your shell to > bash, and sourced that same file, bash found no valid commands... just as you > experienced. > > "Rational" programmers always put a shebang line as the first line of any > shell script -- in that way they remind themselves WHICH shell it was written > for, AND, more importantly, it allows that script to be "executed" as a > "stand-alone" program. > > When a file is sourced, the "shebang" line -- the first line of the file > ("#!/bin/tcsh", "#!/bin/bash", "#!/bin/zsh") is simply ignored. It is treated > as a comment because of the leading "#" by the shell's interpreter. > > For a "file" to become an executable program (i.e. something with the execute > bits set), the first line of the file is examined by they system call, > "exec." Exec determines just what it is being asked to look at, and therefore > what it should do with it. A compiled binary file is no different than a shell > script file -- they are both merely strings of bits and bytes. However, the > beginning of the file contains information which tells exec exactly what > format the file is in... compiled binary or text. > If it is a text file, the first line of the file is examined to determine what > interpreter to invoke. > If there is no shebang line present to invoke an interpreter you will get lots > of funny errors when you try to exec that love letter you wrote. But with the > shebang line present, an interpreter is invoked to read and interpret the > remaining data in the file. > > There is lots of other "magic" taking place, ("man magic" for one example) > including games played with the filename extension -- .sh, .tcsh, .bash, .pl, > .jar, etc. -- which simply makes life "easier" for the end user. > > "Flexability" is a key point in Unix and enunciated in Perl -- There is more > than one correct way to do things! Just as the tuber which grows underground > can correctly be called a Russet, Idaho or Potato, except in very specific > situations, the difference does not matter. > > T.T.F.N. > William H. Magill > # Beige G3 - Rev A motherboard - 768 Meg > # Flat-panel iMac (2.1) 800MHz - Super Drive - 768 Meg > # PWS433a [Alpha 21164 Rev 7.2 (EV56)- 64 Meg]- Tru64 5.1a > # XP1000 [Alpha EV6] > magill at mcgillsociety.org > magill at acm.org > magill at mac.com > whmagill at gmail.com > > > _______________________________________________ > X-Unix mailing list > X-Unix at listserver.themacintoshguy.com > http://listserver.themacintoshguy.com/mailman/listinfo/x-unix >