1 |
.TH GETOPT "1" "June 2012" "Linux" "User Commands" |
2 |
.SH NAME |
3 |
getopt \- parse command options (enhanced) |
4 |
.SH SYNOPSIS |
5 |
.BI getopt |
6 |
.I optstring parameters |
7 |
.br |
8 |
.B getopt |
9 |
.RI [ options ] |
10 |
.RB [ \-\- ] |
11 |
.I optstring parameters |
12 |
.br |
13 |
.B getopt |
14 |
.RI [ options ] |
15 |
.BR \-o | \-\-options |
16 |
.I optstring |
17 |
.RI [ options ] |
18 |
.RB [ \-\- ] |
19 |
.I parameters |
20 |
.SH DESCRIPTION |
21 |
.B getopt |
22 |
is used to break up |
23 |
.RI ( parse ) |
24 |
options in command lines for easy parsing by shell procedures, and to |
25 |
check for legal options. It uses the |
26 |
.SM GNU |
27 |
.BR getopt (3) |
28 |
routines to do this. |
29 |
.PP |
30 |
The parameters |
31 |
.B getopt |
32 |
is called with can be divided into two parts: options which modify |
33 |
the way |
34 |
.B getopt |
35 |
will do the parsing |
36 |
.RI "(the " options |
37 |
and the |
38 |
.I optstring |
39 |
in the |
40 |
.BR SYNOPSIS ), |
41 |
and the parameters which are to be parsed |
42 |
.RI ( parameters |
43 |
in the |
44 |
.BR SYNOPSIS ). |
45 |
The second part will start at the first non\-option parameter that is |
46 |
not an option argument, or after the first occurrence of |
47 |
.RB ' \-\- '. |
48 |
If no |
49 |
.RB ' \-o ' |
50 |
or |
51 |
.RB ' \-\-options ' |
52 |
option is found in the first part, the first parameter of the second |
53 |
part is used as the short options string. |
54 |
.PP |
55 |
If the environment variable |
56 |
.B GETOPT_COMPATIBLE |
57 |
is set, or if the first \fIparameter\fR is not an option (does not start |
58 |
with a |
59 |
.RB ' \- ', |
60 |
the first format in the |
61 |
.BR SYNOPSIS ), |
62 |
.B getopt |
63 |
will generate output that is compatible with that of other versions of |
64 |
.BR getopt (1). |
65 |
It will still do parameter shuffling and recognize optional arguments |
66 |
(see section |
67 |
.B COMPATIBILITY |
68 |
for more information). |
69 |
.PP |
70 |
Traditional implementations of |
71 |
.BR getopt (1) |
72 |
are unable to cope with whitespace and other (shell\-specific) |
73 |
special characters in arguments and non\-option parameters. To solve |
74 |
this problem, this implementation can generate quoted output which |
75 |
must once again be interpreted by the shell (usually by using the |
76 |
.B eval |
77 |
command). This has the effect of preserving those characters, but |
78 |
you must call |
79 |
.B getopt |
80 |
in a way that is no longer compatible with other versions (the second |
81 |
or third format in the |
82 |
.BR SYNOPSIS ). |
83 |
To determine whether this enhanced version of |
84 |
.BR getopt (1) |
85 |
is installed, a special test option |
86 |
.RB ( \-T ) |
87 |
can be used. |
88 |
.SH OPTIONS |
89 |
.TP |
90 |
.BR \-a , " \-\-alternative" |
91 |
Allow long options to start with a single |
92 |
.RB ' \- '. |
93 |
.TP |
94 |
.BR \-h , " \-\-help" |
95 |
Display help text and exit. No other output is generated. |
96 |
.TP |
97 |
.BR \-l , " \-\-longoptions \fIlongopts\fP" |
98 |
The long (multi\-character) options to be recognized. More than one |
99 |
option name may be specified at once, by separating the names with |
100 |
commas. This option may be given more than once, the |
101 |
.I longopts |
102 |
are cumulative. Each long option name in |
103 |
.I longopts |
104 |
may be followed by one colon to indicate it has a required argument, |
105 |
and by two colons to indicate it has an optional argument. |
106 |
.TP |
107 |
.BR \-n , " \-\-name \fIprogname\fP" |
108 |
The name that will be used by the |
109 |
.BR getopt (3) |
110 |
routines when it reports errors. Note that errors of |
111 |
.BR getopt (1) |
112 |
are still reported as coming from getopt. |
113 |
.TP |
114 |
.BR \-o , " \-\-options \fIshortopts\fP" |
115 |
The short (one\-character) options to be recognized. If this option |
116 |
is not found, the first parameter of |
117 |
.B getopt |
118 |
that does not start with a |
119 |
.RB ' \- ' |
120 |
(and is not an option argument) is used as the short options string. |
121 |
Each short option character in |
122 |
.I shortopts |
123 |
may be followed by one colon to indicate it has a required argument, |
124 |
and by two colons to indicate it has an optional argument. The first |
125 |
character of shortopts may be |
126 |
.RB ' + ' |
127 |
or |
128 |
.RB ' \- ' |
129 |
to influence the way options are parsed and output is generated (see |
130 |
section |
131 |
.B SCANNING MODES |
132 |
for details). |
133 |
.TP |
134 |
.BR \-q , " \-\-quiet" |
135 |
Disable error reporting by getopt(3). |
136 |
.TP |
137 |
.BR \-Q , " \-\-quiet\-output" |
138 |
Do not generate normal output. Errors are still reported by |
139 |
.BR getopt (3), |
140 |
unless you also use |
141 |
.BR \-q . |
142 |
.TP |
143 |
.BR \-s , " \-\-shell \fIshell\fP" |
144 |
Set quoting conventions to those of \fIshell\fR. |
145 |
If the \fB\-s\fR option is not given, the |
146 |
.SM BASH |
147 |
conventions are used. Valid arguments are currently |
148 |
.RB ' sh ' |
149 |
.RB ' bash ', |
150 |
.RB ' csh ', |
151 |
and |
152 |
.RB ' tcsh '. |
153 |
.TP |
154 |
.BR \-u , " \-\-unquoted" |
155 |
Do not quote the output. Note that whitespace and special |
156 |
(shell\-dependent) characters can cause havoc in this mode (like they |
157 |
do with other |
158 |
.BR getopt (1) |
159 |
implementations). |
160 |
.TP |
161 |
.BR \-T , " \-\-test" |
162 |
Test if your |
163 |
.BR getopt (1) |
164 |
is this enhanced version or an old version. This generates no |
165 |
output, and sets the error status to 4. Other implementations of |
166 |
.BR getopt (1), |
167 |
and this version if the environment variable |
168 |
.B GETOPT_COMPATIBLE |
169 |
is set, will return |
170 |
.RB ' \-\- ' |
171 |
and error status 0. |
172 |
.TP |
173 |
.BR \-V , " \-\-version" |
174 |
Display version information and exit. No other output is generated. |
175 |
.SH PARSING |
176 |
This section specifies the format of the second part of the |
177 |
parameters of |
178 |
.B getopt |
179 |
(the |
180 |
.I parameters |
181 |
in the |
182 |
.BR SYNOPSIS ). |
183 |
The next section |
184 |
.RB ( OUTPUT ) |
185 |
describes the output that is generated. These parameters were |
186 |
typically the parameters a shell function was called with. Care must |
187 |
be taken that each parameter the shell function was called with |
188 |
corresponds to exactly one parameter in the parameter list of |
189 |
.B getopt |
190 |
(see the |
191 |
.BR EXAMPLES ). |
192 |
All parsing is done by the GNU |
193 |
.BR getopt (3) |
194 |
routines. |
195 |
.PP |
196 |
The parameters are parsed from left to right. Each parameter is |
197 |
classified as a short option, a long option, an argument to an |
198 |
option, or a non\-option parameter. |
199 |
.PP |
200 |
A simple short option is a |
201 |
.RB ' \- ' |
202 |
followed by a short option character. If the option has a required |
203 |
argument, it may be written directly after the option character or as |
204 |
the next parameter (i.e. separated by whitespace on the command |
205 |
line). If the option has an optional argument, it must be written |
206 |
directly after the option character if present. |
207 |
.PP |
208 |
It is possible to specify several short options after one |
209 |
.RB ' \- ', |
210 |
as long as all (except possibly the last) do not have required or |
211 |
optional arguments. |
212 |
.PP |
213 |
A long option normally begins with |
214 |
.RB ' \-\- ' |
215 |
followed by the long option name. If the option has a required |
216 |
argument, it may be written directly after the long option name, |
217 |
separated by |
218 |
.RB ' = ', |
219 |
or as the next argument (i.e. separated by whitespace on the command |
220 |
line). If the option has an optional argument, it must be written |
221 |
directly after the long option name, separated by |
222 |
.RB ' = ', |
223 |
if present (if you add the |
224 |
.RB ' = ' |
225 |
but nothing behind it, it is interpreted as if no argument was |
226 |
present; this is a slight bug, see the |
227 |
.BR BUGS ). |
228 |
Long options may be abbreviated, as long as the abbreviation is not |
229 |
ambiguous. |
230 |
.PP |
231 |
Each parameter not starting with a |
232 |
.RB ' \- ', |
233 |
and not a required argument of a previous option, is a non\-option |
234 |
parameter. Each parameter after a |
235 |
.RB ' \-\- ' |
236 |
parameter is always interpreted as a non\-option parameter. If the |
237 |
environment variable |
238 |
.B POSIXLY_CORRECT |
239 |
is set, or if the short option string started with a |
240 |
.RB ' + ', |
241 |
all remaining parameters are interpreted as non\-option parameters as |
242 |
soon as the first non\-option parameter is found. |
243 |
.SH OUTPUT |
244 |
Output is generated for each element described in the previous |
245 |
section. Output is done in the same order as the elements are |
246 |
specified in the input, except for non\-option parameters. Output |
247 |
can be done in |
248 |
.I compatible |
249 |
.RI ( unquoted ) |
250 |
mode, or in such way that whitespace and other special characters |
251 |
within arguments and non\-option parameters are preserved (see |
252 |
.BR QUOTING ). |
253 |
When the output is processed in the shell script, it will seem to be |
254 |
composed of distinct elements that can be processed one by one (by |
255 |
using the shift command in most shell languages). This is imperfect |
256 |
in unquoted mode, as elements can be split at unexpected places if |
257 |
they contain whitespace or special characters. |
258 |
.PP |
259 |
If there are problems parsing the parameters, for example because a |
260 |
required argument is not found or an option is not recognized, an |
261 |
error will be reported on stderr, there will be no output for the |
262 |
offending element, and a non\-zero error status is returned. |
263 |
.PP |
264 |
For a short option, a single |
265 |
.RB ' \- ' |
266 |
and the option character are generated as one parameter. If the |
267 |
option has an argument, the next parameter will be the argument. If |
268 |
the option takes an optional argument, but none was found, the next |
269 |
parameter will be generated but be empty in quoting mode, but no |
270 |
second parameter will be generated in unquoted (compatible) mode. |
271 |
Note that many other |
272 |
.BR getopt (1) |
273 |
implementations do not support optional arguments. |
274 |
.PP |
275 |
If several short options were specified after a single |
276 |
.RB ' \- ', |
277 |
each will be present in the output as a separate parameter. |
278 |
.PP |
279 |
For a long option, |
280 |
.RB ' \-\- ' |
281 |
and the full option name are generated as one parameter. This is |
282 |
done regardless whether the option was abbreviated or specified with |
283 |
a single |
284 |
.RB ' \- ' |
285 |
in the input. Arguments are handled as with short options. |
286 |
.PP |
287 |
Normally, no non\-option parameters output is generated until all |
288 |
options and their arguments have been generated. Then |
289 |
.RB ' \-\- ' |
290 |
is generated as a single parameter, and after it the non\-option |
291 |
parameters in the order they were found, each as a separate |
292 |
parameter. Only if the first character of the short options string |
293 |
was a |
294 |
.RB ' \- ', |
295 |
non\-option parameter output is generated at the place they are found |
296 |
in the input (this is not supported if the first format of the |
297 |
.B SYNOPSIS |
298 |
is used; in that case all preceding occurrences of |
299 |
.RB ' \- ' |
300 |
and |
301 |
.RB ' + ' |
302 |
are ignored). |
303 |
.SH QUOTING |
304 |
In compatible mode, whitespace or 'special' characters in arguments |
305 |
or non\-option parameters are not handled correctly. As the output |
306 |
is fed to the shell script, the script does not know how it is |
307 |
supposed to break the output into separate parameters. To circumvent |
308 |
this problem, this implementation offers quoting. The idea is that |
309 |
output is generated with quotes around each parameter. When this |
310 |
output is once again fed to the shell (usually by a shell |
311 |
.B eval |
312 |
command), it is split correctly into separate parameters. |
313 |
.PP |
314 |
Quoting is not enabled if the environment variable |
315 |
.B GETOPT_COMPATIBLE |
316 |
is set, if the first form of the |
317 |
.B SYNOPSIS |
318 |
is used, or if the option |
319 |
.RB ' \-u ' |
320 |
is found. |
321 |
.PP |
322 |
Different shells use different quoting conventions. You can use the |
323 |
.RB ' \-s ' |
324 |
option to select the shell you are using. The following shells are |
325 |
currently supported: |
326 |
.RB ' sh ', |
327 |
.RB ' bash ', |
328 |
.RB ' csh ' |
329 |
and |
330 |
.RB ' tcsh '. |
331 |
Actually, only two 'flavors' are distinguished: sh\-like quoting |
332 |
conventions and csh\-like quoting conventions. Chances are that if |
333 |
you use another shell script language, one of these flavors can still |
334 |
be used. |
335 |
.SH "SCANNING MODES" |
336 |
The first character of the short options string may be a |
337 |
.RB ' \- ' |
338 |
or a |
339 |
.RB ' + ' |
340 |
to indicate a special scanning mode. If the first calling form in |
341 |
the |
342 |
.B SYNOPSIS |
343 |
is used they are ignored; the environment variable |
344 |
.B POSIXLY_CORRECT |
345 |
is still examined, though. |
346 |
.PP |
347 |
If the first character is |
348 |
.RB ' + ', |
349 |
or if the environment variable |
350 |
.B POSIXLY_CORRECT |
351 |
is set, parsing stops as soon as the first non\-option parameter |
352 |
(i.e. a parameter that does not start with a |
353 |
.RB ' \- ') |
354 |
is found that is not an option argument. The remaining parameters |
355 |
are all interpreted as non\-option parameters. |
356 |
.PP |
357 |
If the first character is a |
358 |
.RB ' \- ', |
359 |
non\-option parameters are outputted at the place where they are |
360 |
found; in normal operation, they are all collected at the end of |
361 |
output after a |
362 |
.RB ' \-\- ' |
363 |
parameter has been generated. Note that this |
364 |
.RB ' \-\- ' |
365 |
parameter is still generated, but it will always be the last |
366 |
parameter in this mode. |
367 |
.SH COMPATIBILITY |
368 |
This version of |
369 |
.BR getopt (1) |
370 |
is written to be as compatible as possible to other versions. |
371 |
Usually you can just replace them with this version without any |
372 |
modifications, and with some advantages. |
373 |
.PP |
374 |
If the first character of the first parameter of getopt is not a |
375 |
.RB ' \- ', |
376 |
.B getopt |
377 |
goes into compatibility mode. It will interpret its first |
378 |
parameter as the string of short options, and all other arguments |
379 |
will be parsed. It will still do parameter shuffling (i.e. all |
380 |
non\-option parameters are output at the end), unless the |
381 |
environment variable |
382 |
.B POSIXLY_CORRECT |
383 |
is set. |
384 |
.PP |
385 |
The environment variable |
386 |
.B GETOPT_COMPATIBLE |
387 |
forces |
388 |
.B getopt |
389 |
into compatibility mode. Setting both this environment variable and |
390 |
.B POSIXLY_CORRECT |
391 |
offers 100% compatibility for 'difficult' programs. Usually, though, |
392 |
neither is needed. |
393 |
.PP |
394 |
In compatibility mode, leading |
395 |
.RB ' \- ' |
396 |
and |
397 |
.RB ' + ' |
398 |
characters in the short options string are ignored. |
399 |
.SH RETURN CODES |
400 |
.B getopt |
401 |
returns error code |
402 |
.B 0 |
403 |
for successful parsing, |
404 |
.B 1 |
405 |
if |
406 |
.BR getopt (3) |
407 |
returns errors, |
408 |
.B 2 |
409 |
if it does not understand its own parameters, |
410 |
.B 3 |
411 |
if an internal error occurs like out\-of\-memory, and |
412 |
.B 4 |
413 |
if it is called with |
414 |
.BR \-T . |
415 |
.SH EXAMPLES |
416 |
Example scripts for (ba)sh and (t)csh are provided with the |
417 |
.BR getopt (1) |
418 |
distribution, and are optionally installed in |
419 |
.BR /usr/local/share/getopt/ |
420 |
or |
421 |
.BR /usr/share/getopt/ . |
422 |
.SH ENVIRONMENT |
423 |
.IP POSIXLY_CORRECT |
424 |
This environment variable is examined by the |
425 |
.BR getopt (3) |
426 |
routines. If it is set, parsing stops as soon as a parameter is |
427 |
found that is not an option or an option argument. All remaining |
428 |
parameters are also interpreted as non\-option parameters, regardless |
429 |
whether they start with a |
430 |
.RB ' \- '. |
431 |
.IP GETOPT_COMPATIBLE |
432 |
Forces |
433 |
.B getopt |
434 |
to use the first calling format as specified in the |
435 |
.BR SYNOPSIS . |
436 |
.SH BUGS |
437 |
.BR getopt (3) |
438 |
can parse long options with optional arguments that are given an |
439 |
empty optional argument (but can not do this for short options). |
440 |
This |
441 |
.BR getopt (1) |
442 |
treats optional arguments that are empty as if they were not present. |
443 |
.PP |
444 |
The syntax if you do not want any short option variables at all is |
445 |
not very intuitive (you have to set them explicitly to the empty |
446 |
string). |
447 |
.SH AUTHOR |
448 |
.MT frodo@frodo.looijaard.name |
449 |
Frodo Looijaard |
450 |
.ME |
451 |
.SH "SEE ALSO" |
452 |
.BR getopt (3), |
453 |
.BR bash (1), |
454 |
.BR tcsh (1). |
455 |
.SH AVAILABILITY |
456 |
You can download the latest getopt from |
457 |
.UR http://frodo.looijaard.name/project/getopt |
458 |
the author's home page |
459 |
.UE . |
460 |
It is also part of the util-linux package which is available from |
461 |
.UR ftp://\:ftp.kernel.org\:/pub\:/linux\:/utils\:/util-linux/ |
462 |
Linux Kernel Archive |
463 |
.UE . |