Option Arguments

As mentioned in the Section called Executing Commands in the Chapter called Interacting with the GNO Shell, arguments are passed to a command to extend its usefulness. The arguments presented in the last chapter were words, such as foo, bar and foo.c. Standards exist under UNIX for programs to accept command-line option arguments. Option arguments (as the name suggests) are optional. There are two standards, short options and long options. Short options are characters that represent commands, whereas long options contain the entire option name.

Consider the following output of the CATALOG command from ProDOS:


/DEV
NAME        TYPE BLOCKS MODIFIED        CREATED       ENDFILE

FINDER.DATA $C9       1 21-OCT-91 22:38 14-APR-90 18:24   260 
FINDER.ROOT $C9       1 22-OCT-91 17:12  6-OCT-91 15:40    82 
GENESYS     DIR       1 21-OCT-91 23:37 25-APR-91 15:46   512 
GSBUG       DIR       1 21-OCT-91 23:38 19-JUL-90 16:48   512 
MERLIN      DIR       2 22-OCT-91  2:50 30-APR-91 20:21  1024 
LIFEGUARD   $B3      73  4-SEP-87  4:51 25-DEC-89 20:22 36608 
ORCA        DIR       2 22-OCT-91 17:12 14-SEP-89 18:27  1024 
GNO         DIR       2 22-OCT-91 17:12 13-AUG-91 16:36  1024 
FAST.ANIM   DIR       2 21-OCT-91 23:44 11-MAY-91 10:50  1024 
MICOL       DIR       2 22-OCT-91  3:10 14-JAN-90  2:46  1024 
SRC         DIR       1 21-OCT-91 23:44  7-AUG-91 20:30   512 
NIFTYLIST   DIR       2 21-OCT-91 23:44 29-JUL-91  4:04  1024 
MCSRC       DIR       1 21-OCT-91 23:45  7-AUG-91 20:34   512 

BLOCKS FREE:43923     BLOCKS USED:21185    TOTAL BLOCKS:65108

It is impossible to get any variation in the format of this output. While the GNO/ME utility ls serves the same purpose as the command CATALOG from Applesoft BASIC, it has a wide number of options which can tailor the output to specific needs. Here is how ls can be used to give similar output to the CATALOG command:


gno%  ls -l
:dev
total 45k
drw--rd 0000 dir         512 Oct 21 23:45 1991 MCSrc
drw--rd 0000 dir        1024 Oct 21 23:44 1991 NiftyList
drw--rd 0000 dir        1024 Oct 21 23:44 1991 fast.anim
drw--rd 0000 dir         512 Oct 21 23:37 1991 genesys
drw--rd 0000 dir        1024 Oct 22 17:29 1991 gno
drw--rd 0000 dir         512 Oct 21 23:38 1991 gsbug
drw--rd 0000 dir        1024 Oct 22 02:50 1991 merlin
drw--rd 0000 dir        1024 Oct 22 03:10 1991 micol
drw--rd 0100 dir        1024 Oct 22 17:28 1991 orca
drw--rd 0000 dir         512 Oct 21 23:44 1991 src

The -l short option argument tells ls to format the output in long format. ls supports only short options. If ls did support long options, the above command could be changed to ls +format-long. This is clearly more descriptive of what function ls will perform. For users to new to the UNIX environment, long format options are more user-friendly. However, advanced UNIX users prefer short options because of their brevity.

As indicated above, ls has a wide number of options available to format the output. Use the command "ls -?" to get a short list of these options. It is left as an exercise for the user to discover how these options affect the output of ls. For a complete description of the ls command and its options use the command man ls.

As an example of the usage and importance of long options, the following is the result of the +help option given to the coff utility. Note the use of both short and long options:


coff [-OPTIONS] filename [segment..] [loadsegment..]

  OPTIONS        DESCRIPTION
  -v [+version]  display coff's version number
  -D [+default]  disable default options
  -d [+asm]      dump segment body in 65816-format disassembly
  -T [+tool]     interpret Toolbox, GS/OS, ProDOS, ROM calls
  -x [+hex]      dump segment body in hex (can be used with '+asm')
  -l [+label]    print expressions using labels (default is offsets)
  -t [+infix]    display expressions in infix form
  -p [+postfix]  display expressions in postfix form (default)
  -m [+merlin]   format of '+asm' to use merlin opcodes (default)
  -o [+orca]     format of '+asm' to use orca/m opcodes
  -a [+shorta]   assume 8-bit accumulator for disassembly
  -i [+shorti]   assume 8-bit index registers for disassembly
  -s [+header]   dump segment headers only
  -n [+noheader] do not print segment headers
  -f [+nooffset] do not print offset into file
  -h [+help]     print this information, then quit
  filename       name of file to dump
  [segment]      names of segments in file to dump
  [loadsegment]  names of load segments in file to dump

The long options are much more descriptive, and provide a very easy way to remember options of programs. If an option passed to a shell utility program is not understood by that program, you will generally receive an error message stating that the option is not understood. If the program is user-friendly, a brief list of supported options will also be displayed.