1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- @c -*-texinfo-*-
- @c This is part of the GNU Guile Reference Manual.
- @c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004
- @c Free Software Foundation, Inc.
- @c See the file guile.texi for copying conditions.
- @page
- @node Command Line Handling
- @section Handling Command Line Options and Arguments
- @c This chapter was written and contributed by Martin Grabmueller.
- The ability to accept and handle command line arguments is very
- important when writing Guile scripts to solve particular problems, such
- as extracting information from text files or interfacing with existing
- command line applications. This chapter describes how Guile makes
- command line arguments available to a Guile script, and the utilities
- that Guile provides to help with the processing of command line
- arguments.
- When a Guile script is invoked, Guile makes the command line arguments
- accessible via the procedure @code{command-line}, which returns the
- arguments as a list of strings.
- For example, if the script
- @example
- #! /usr/local/bin/guile -s
- !#
- (write (command-line))
- (newline)
- @end example
- @noindent
- is saved in a file @file{cmdline-test.scm} and invoked using the command
- line @code{./cmdline-test.scm bar.txt -o foo -frumple grob}, the output
- is
- @example
- ("./cmdline-test.scm" "bar.txt" "-o" "foo" "-frumple" "grob")
- @end example
- If the script invocation includes a @code{-e} option, specifying a
- procedure to call after loading the script, Guile will call that
- procedure with @code{(command-line)} as its argument. So a script that
- uses @code{-e} doesn't need to refer explicitly to @code{command-line}
- in its code. For example, the script above would have identical
- behaviour if it was written instead like this:
- @example
- #! /usr/local/bin/guile \
- -e main -s
- !#
- (define (main args)
- (write args)
- (newline))
- @end example
- (Note the use of the meta switch @code{\} so that the script invocation
- can include more than one Guile option: @xref{The Meta Switch}.)
- These scripts use the @code{#!} POSIX convention so that they can be
- executed using their own file names directly, as in the example command
- line @code{./cmdline-test.scm bar.txt -o foo -frumple grob}. But they
- can also be executed by typing out the implied Guile command line in
- full, as in:
- @example
- $ guile -s ./cmdline-test.scm bar.txt -o foo -frumple grob
- @end example
- @noindent
- or
- @example
- $ guile -e main -s ./cmdline-test2.scm bar.txt -o foo -frumple grob
- @end example
- Even when a script is invoked using this longer form, the arguments that
- the script receives are the same as if it had been invoked using the
- short form. Guile ensures that the @code{(command-line)} or @code{-e}
- arguments are independent of how the script is invoked, by stripping off
- the arguments that Guile itself processes.
- A script is free to parse and handle its command line arguments in any
- way that it chooses. Where the set of possible options and arguments is
- complex, however, it can get tricky to extract all the options, check
- the validity of given arguments, and so on. This task can be greatly
- simplified by taking advantage of the module @code{(ice-9 getopt-long)},
- which is distributed with Guile, @xref{getopt-long}.
- @c Local Variables:
- @c TeX-master: "guile.texi"
- @c End:
|