| 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 . |