mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
94 lines
3.2 KiB
Text
94 lines
3.2 KiB
Text
@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:
|