Merge remote-tracking branch 'origin/stable-2.0'
[bpt/guile.git] / doc / ref / guile-invoke.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Guile Reference Manual.
3 @c Copyright (C) 1996, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2010, 2011, 2013
4 @c Free Software Foundation, Inc.
5 @c See the file guile.texi for copying conditions.
6
7 @node Invoking Guile
8 @section Invoking Guile
9 @cindex invocation
10
11 Many features of Guile depend on and can be changed by information that
12 the user provides either before or when Guile is started. Below is a
13 description of what information to provide and how to provide it.
14
15 @menu
16 * Command-line Options:: Command-line options understood by Guile.
17 * Environment Variables:: Variables that affect Guile's behavior.
18 @end menu
19
20 @node Command-line Options
21 @subsection Command-line Options
22 @cindex Command-line Options
23 @cindex command-line arguments
24 @cindex arguments (command line)
25 @cindex options (command line)
26 @cindex switches (command line)
27 @cindex startup (command-line arguments)
28 @cindex invocation (command-line arguments)
29
30 Here we describe Guile's command-line processing in detail. Guile
31 processes its arguments from left to right, recognizing the switches
32 described below. For examples, see @ref{Scripting Examples}.
33
34 @table @code
35
36 @item @var{script} @var{arg...}
37 @itemx -s @var{script} @var{arg...}
38 @cindex script mode
39 By default, Guile will read a file named on the command line as a
40 script. Any command-line arguments @var{arg...} following @var{script}
41 become the script's arguments; the @code{command-line} function returns
42 a list of strings of the form @code{(@var{script} @var{arg...})}.
43
44 It is possible to name a file using a leading hyphen, for example,
45 @file{-myfile.scm}. In this case, the file name must be preceded by
46 @option{-s} to tell Guile that a (script) file is being named.
47
48 Scripts are read and evaluated as Scheme source code just as the
49 @code{load} function would. After loading @var{script}, Guile exits.
50
51 @item -c @var{expr} @var{arg...}
52 @cindex evaluate expression, command-line argument
53 Evaluate @var{expr} as Scheme code, and then exit. Any command-line
54 arguments @var{arg...} following @var{expr} become command-line
55 arguments; the @code{command-line} function returns a list of strings of
56 the form @code{(@var{guile} @var{arg...})}, where @var{guile} is the
57 path of the Guile executable.
58
59 @item -- @var{arg...}
60 Run interactively, prompting the user for expressions and evaluating
61 them. Any command-line arguments @var{arg...} following the @option{--}
62 become command-line arguments for the interactive session; the
63 @code{command-line} function returns a list of strings of the form
64 @code{(@var{guile} @var{arg...})}, where @var{guile} is the path of the
65 Guile executable.
66
67 @item -L @var{directory}
68 Add @var{directory} to the front of Guile's module load path. The given
69 directories are searched in the order given on the command line and
70 before any directories in the @env{GUILE_LOAD_PATH} environment
71 variable. Paths added here are @emph{not} in effect during execution of
72 the user's @file{.guile} file.
73
74 @item -C @var{directory}
75 Like @option{-L}, but adjusts the load path for @emph{compiled} files.
76
77 @item -x @var{extension}
78 Add @var{extension} to the front of Guile's load extension list
79 (@pxref{Load Paths, @code{%load-extensions}}). The specified extensions
80 are tried in the order given on the command line, and before the default
81 load extensions. Extensions added here are @emph{not} in effect during
82 execution of the user's @file{.guile} file.
83
84 @item -l @var{file}
85 Load Scheme source code from @var{file}, and continue processing the
86 command line.
87
88 @item -e @var{function}
89 Make @var{function} the @dfn{entry point} of the script. After loading
90 the script file (with @option{-s}) or evaluating the expression (with
91 @option{-c}), apply @var{function} to a list containing the program name
92 and the command-line arguments---the list provided by the
93 @code{command-line} function.
94
95 A @option{-e} switch can appear anywhere in the argument list, but Guile
96 always invokes the @var{function} as the @emph{last} action it performs.
97 This is weird, but because of the way script invocation works under
98 POSIX, the @option{-s} option must always come last in the list.
99
100 The @var{function} is most often a simple symbol that names a function
101 that is defined in the script. It can also be of the form @code{(@@
102 @var{module-name} @var{symbol})}, and in that case, the symbol is
103 looked up in the module named @var{module-name}.
104
105 For compatibility with some versions of Guile 1.4, you can also use the
106 form @code{(symbol ...)} (that is, a list of only symbols that doesn't
107 start with @code{@@}), which is equivalent to @code{(@@ (symbol ...)
108 main)}, or @code{(symbol ...) symbol} (that is, a list of only symbols
109 followed by a symbol), which is equivalent to @code{(@@ (symbol ...)
110 symbol)}. We recommend to use the equivalent forms directly since they
111 correspond to the @code{(@@ ...)} read syntax that can be used in
112 normal code. See @ref{Using Guile Modules} and @ref{Scripting
113 Examples}.
114
115 @item -ds
116 Treat a final @option{-s} option as if it occurred at this point in the
117 command line; load the script here.
118
119 This switch is necessary because, although the POSIX script invocation
120 mechanism effectively requires the @option{-s} option to appear last, the
121 programmer may well want to run the script before other actions
122 requested on the command line. For examples, see @ref{Scripting
123 Examples}.
124
125 @item \
126 Read more command-line arguments, starting from the second line of the
127 script file. @xref{The Meta Switch}.
128
129 @item --use-srfi=@var{list}
130 @cindex loading srfi modules (command line)
131 The option @option{--use-srfi} expects a comma-separated list of numbers,
132 each representing a SRFI module to be loaded into the interpreter
133 before evaluating a script file or starting the REPL. Additionally,
134 the feature identifier for the loaded SRFIs is recognized by
135 the procedure @code{cond-expand} when this option is used.
136
137 Here is an example that loads the modules SRFI-8 ('receive') and SRFI-13
138 ('string library') before the GUILE interpreter is started:
139
140 @example
141 guile --use-srfi=8,13
142 @end example
143
144 @item --debug
145 @cindex debugging virtual machine (command line)
146 Start with the debugging virtual machine (VM) engine. Using the
147 debugging VM will enable support for VM hooks, which are needed for
148 tracing, breakpoints, and accurate call counts when profiling. The
149 debugging VM is slower than the regular VM, though, by about ten
150 percent. @xref{VM Hooks}, for more information.
151
152 By default, the debugging VM engine is only used when entering an
153 interactive session. When executing a script with @option{-s} or
154 @option{-c}, the normal, faster VM is used by default.
155
156 @vnew{1.8}
157 @item --no-debug
158 @cindex debugging virtual machine (command line)
159 Do not use the debugging VM engine, even when entering an interactive
160 session.
161
162 Note that, despite the name, Guile running with @option{--no-debug}
163 @emph{does} support the usual debugging facilities, such as printing a
164 detailed backtrace upon error. The only difference with
165 @option{--debug} is lack of support for VM hooks and the facilities that
166 build upon it (see above).
167
168 @item -q
169 @cindex init file, not loading
170 @cindex @file{.guile} file, not loading
171 Do not load the initialization file, @file{.guile}. This option only
172 has an effect when running interactively; running scripts does not load
173 the @file{.guile} file. @xref{Init File}.
174
175 @item --listen[=@var{p}]
176 While this program runs, listen on a local port or a path for REPL
177 clients. If @var{p} starts with a number, it is assumed to be a local
178 port on which to listen. If it starts with a forward slash, it is
179 assumed to be a path to a UNIX domain socket on which to listen.
180
181 If @var{p} is not given, the default is local port 37146. If you look
182 at it upside down, it almost spells ``Guile''. If you have netcat
183 installed, you should be able to @kbd{nc localhost 37146} and get a
184 Guile prompt. Alternately you can fire up Emacs and connect to the
185 process; see @ref{Using Guile in Emacs} for more details.
186
187 Note that opening a port allows anyone who can connect to that port---in
188 the TCP case, any local user---to do anything Guile can do, as the user
189 that the Guile process is running as. Do not use @option{--listen} on
190 multi-user machines. Of course, if you do not pass @option{--listen} to
191 Guile, no port will be opened.
192
193 That said, @option{--listen} is great for interactive debugging and
194 development.
195
196 @vnew{2.0}
197
198 @item --auto-compile
199 Compile source files automatically (default behavior).
200
201 @vnew{2.0.1}
202
203 @item --fresh-auto-compile
204 Treat the auto-compilation cache as invalid, forcing recompilation.
205
206 @vnew{2.0}
207
208 @item --no-auto-compile
209 Disable automatic source file compilation.
210
211 @vnew{2.0}
212
213 @item -h@r{, }--help
214 Display help on invoking Guile, and then exit.
215
216 @item -v@r{, }--version
217 Display the current version of Guile, and then exit.
218
219 @end table
220
221 @node Environment Variables
222 @subsection Environment Variables
223 @cindex environment variables
224 @cindex shell
225 @cindex initialization
226 The @dfn{environment} is a feature of the operating system; it consists
227 of a collection of variables with names and values. Each variable is
228 called an @dfn{environment variable} (or, sometimes, a ``shell
229 variable''); environment variable names are case-sensitive, and it is
230 conventional to use upper-case letters only. The values are all text
231 strings, even those that are written as numerals. (Note that here we
232 are referring to names and values that are defined in the operating
233 system shell from which Guile is invoked. This is not the same as a
234 Scheme environment that is defined within a running instance of Guile.
235 For a description of Scheme environments, @pxref{About Environments}.)
236
237 How to set environment variables before starting Guile depends on the
238 operating system and, especially, the shell that you are using. For
239 example, here is how to tell Guile to provide detailed warning messages
240 about deprecated features by setting @env{GUILE_WARN_DEPRECATED} using
241 Bash:
242
243 @example
244 $ export GUILE_WARN_DEPRECATED="detailed"
245 $ guile
246 @end example
247
248 @noindent
249 Or, detailed warnings can be turned on for a single invocation using:
250
251 @example
252 $ env GUILE_WARN_DEPRECATED="detailed" guile
253 @end example
254
255 If you wish to retrieve or change the value of the shell environment
256 variables that affect the run-time behavior of Guile from within a
257 running instance of Guile, see @ref{Runtime Environment}.
258
259 Here are the environment variables that affect the run-time behavior of
260 Guile:
261
262 @table @env
263 @item GUILE_AUTO_COMPILE
264 @vindex GUILE_AUTO_COMPILE
265 This is a flag that can be used to tell Guile whether or not to compile
266 Scheme source files automatically. Starting with Guile 2.0, Scheme
267 source files will be compiled automatically, by default.
268
269 If a compiled (@file{.go}) file corresponding to a @file{.scm} file is
270 not found or is not newer than the @file{.scm} file, the @file{.scm}
271 file will be compiled on the fly, and the resulting @file{.go} file
272 stored away. An advisory note will be printed on the console.
273
274 Compiled files will be stored in the directory
275 @file{$XDG_CACHE_HOME/@/guile/@/ccache}, where @env{XDG_CACHE_HOME}
276 defaults to the directory @file{$HOME/.cache}. This directory will be
277 created if it does not already exist.
278
279 Note that this mechanism depends on the timestamp of the @file{.go} file
280 being newer than that of the @file{.scm} file; if the @file{.scm} or
281 @file{.go} files are moved after installation, care should be taken to
282 preserve their original timestamps.
283
284 Set @env{GUILE_AUTO_COMPILE} to zero (0), to prevent Scheme files from
285 being compiled automatically. Set this variable to ``fresh'' to tell
286 Guile to compile Scheme files whether they are newer than the compiled
287 files or not.
288
289 @xref{Compilation}.
290
291 @item GUILE_HISTORY
292 @vindex GUILE_HISTORY
293 This variable names the file that holds the Guile REPL command history.
294 You can specify a different history file by setting this environment
295 variable. By default, the history file is @file{$HOME/.guile_history}.
296
297 @item GUILE_INSTALL_LOCALE
298 @vindex GUILE_INSTALL_LOCALE
299 This is a flag that can be used to tell Guile whether or not to install
300 the current locale at startup, via a call to @code{(setlocale LC_ALL
301 "")}. @xref{Locales}, for more information on locales.
302
303 You may explicitly indicate that you do not want to install
304 the locale by setting @env{GUILE_INSTALL_LOCALE} to @code{0}, or
305 explicitly enable it by setting the variable to @code{1}.
306
307 Usually, installing the current locale is the right thing to do. It
308 allows Guile to correctly parse and print strings with non-ASCII
309 characters. Therefore, this option is on by default.
310
311 @item GUILE_STACK_SIZE
312 @vindex GUILE_STACK_SIZE
313 Guile currently has a limited stack size for Scheme computations.
314 Attempting to call too many nested functions will signal an error. This
315 is good to detect infinite recursion, but sometimes the limit is reached
316 for normal computations. This environment variable, if set to a
317 positive integer, specifies the number of Scheme value slots to allocate
318 for the stack.
319
320 In the future we will implement stacks that can grow and shrink, but for
321 now this hack will have to do.
322
323 @item GUILE_LOAD_COMPILED_PATH
324 @vindex GUILE_LOAD_COMPILED_PATH
325 This variable may be used to augment the path that is searched for
326 compiled Scheme files (@file{.go} files) when loading. Its value should
327 be a colon-separated list of directories. If it contains the special
328 path component @code{...} (ellipsis), then the default path is put in
329 place of the ellipsis, otherwise the default path is placed at the end.
330 The result is stored in @code{%load-compiled-path} (@pxref{Load Paths}).
331
332 Here is an example using the Bash shell that adds the current directory,
333 @file{.}, and the relative directory @file{../my-library} to
334 @code{%load-compiled-path}:
335
336 @example
337 $ export GUILE_LOAD_COMPILED_PATH=".:../my-library"
338 $ guile -c '(display %load-compiled-path) (newline)'
339 (. ../my-library /usr/local/lib/guile/2.0/ccache)
340 @end example
341
342 @item GUILE_LOAD_PATH
343 @vindex GUILE_LOAD_PATH
344 This variable may be used to augment the path that is searched for
345 Scheme files when loading. Its value should be a colon-separated list
346 of directories. If it contains the special path component @code{...}
347 (ellipsis), then the default path is put in place of the ellipsis,
348 otherwise the default path is placed at the end. The result is stored
349 in @code{%load-path} (@pxref{Load Paths}).
350
351 Here is an example using the Bash shell that prepends the current
352 directory to @code{%load-path}, and adds the relative directory
353 @file{../srfi} to the end:
354
355 @example
356 $ env GUILE_LOAD_PATH=".:...:../srfi" \
357 guile -c '(display %load-path) (newline)'
358 (. /usr/local/share/guile/2.0 \
359 /usr/local/share/guile/site/2.0 \
360 /usr/local/share/guile/site \
361 /usr/local/share/guile \
362 ../srfi)
363 @end example
364
365 (Note: The line breaks, above, are for documentation purposes only, and
366 not required in the actual example.)
367
368 @item GUILE_WARN_DEPRECATED
369 @vindex GUILE_WARN_DEPRECATED
370 As Guile evolves, some features will be eliminated or replaced by newer
371 features. To help users migrate their code as this evolution occurs,
372 Guile will issue warning messages about code that uses features that
373 have been marked for eventual elimination. @env{GUILE_WARN_DEPRECATED}
374 can be set to ``no'' to tell Guile not to display these warning
375 messages, or set to ``detailed'' to tell Guile to display more lengthy
376 messages describing the warning. @xref{Deprecation}.
377
378 @item HOME
379 @vindex HOME
380 Guile uses the environment variable @env{HOME}, the name of your home
381 directory, to locate various files, such as @file{.guile} or
382 @file{.guile_history}.
383
384 @item LTDL_LIBRARY_PATH
385 @vindex LTDL_LIBRARY_PATH
386 Guile now adds its install prefix to the @env{LTDL_LIBRARY_PATH}.
387
388 Users may now install Guile in non-standard directories and run
389 `/path/to/bin/guile', without having also to set @env{LTDL_LIBRARY_PATH}
390 to include `/path/to/lib'.
391
392 @end table
393
394 @c Local Variables:
395 @c mode: texinfo
396 @c TeX-master: "guile"
397 @c End: