Get the command line arguments passed to Guile, or set new arguments.
The arguments are a list of strings, the first of which is the invoked
program name. This is just "guile"
(or the executable path)
when run interactively, or it’s the script name when running a script
with -s (see Invoking Guile).
guile -L /my/extra/dir -s foo.scm abc def (program-arguments) ⇒ ("foo.scm" "abc" "def")
set-program-arguments
allows a library module or similar to
modify the arguments, for example to strip options it recognises,
leaving the rest for the mainline.
The argument list is held in a fluid, which means it’s separate for each thread. Neither the list nor the strings within it are copied at any point and normally should not be mutated.
The two names program-arguments
and command-line
are an
historical accident, they both do exactly the same thing. The name
scm_set_program_arguments_scm
has an extra _scm
on the
end to avoid clashing with the C function below.
void
scm_set_program_arguments (int argc, char **argv, char *first)
¶Set the list of command line arguments for program-arguments
and command-line
above.
argv is an array of null-terminated strings, as in a C
main
function. argc is the number of strings in
argv, or if it’s negative then a NULL
in argv marks
its end.
first is an extra string put at the start of the arguments, or
NULL
for no such extra. This is a convenient way to pass the
program name after advancing argv to strip option arguments.
Eg.
{ char *progname = argv[0]; for (argv++; argv[0] != NULL && argv[0][0] == '-'; argv++) { /* munch option ... */ } /* remaining args for scheme level use */ scm_set_program_arguments (-1, argv, progname); }
This sort of thing is often done at startup under
scm_boot_guile
with options handled at the C level removed.
The given strings are all copied, so the C data is not accessed again
once scm_set_program_arguments
returns.
Looks up the string name in the current environment. The return
value is #f
unless a string of the form NAME=VALUE
is
found, in which case the string VALUE
is returned.
Modifies the environment of the current process, which is also the default environment inherited by child processes.
If value is #f
, then name is removed from the
environment. Otherwise, the string name=value is added
to the environment, replacing any existing string with name matching
name.
The return value is unspecified.
Remove variable name from the environment. The name can not contain a ‘=’ character.
If env is omitted, return the current environment (in the Unix sense) as a list of strings. Otherwise set the current environment, which is also the default environment for child processes, to the supplied list of strings. Each member of env should be of the form name=value and values of name should not be duplicated. If env is supplied then the return value is unspecified.
Modifies the environment of the current process, which is also the default environment inherited by child processes.
If str is of the form NAME=VALUE
then it will be written
directly into the environment, replacing any existing environment string
with
name matching NAME
. If str does not contain an equal
sign, then any existing string with name matching str will
be removed.
The return value is unspecified.