Go to the previous, next section.
Please don't make the behavior of a utility depend on the name used
to invoke it. It is useful sometimes to make a link to a utility
with a different name, and that should not change what it does.
Instead, use a run time option or a compilation switch or both
to select among the alternate behaviors.
Likewise, please don't make the behavior of the program depend on the
type of output device it is used with. Device independence is an
important principle of the system's design; do not compromise it
merely to save someone from typing an option now and then.
If you think one behavior is most useful when the output is to a
terminal, and another is most useful when the output is a file or a
pipe, then it is usually best to make the default behavior the one that
is useful with output to a terminal, and have an option for the other
behavior.
Compatibility requires certain programs to depend on the type of output
device. It would be disastrous if ls or sh did not do so
in the way all users expect. In some of these cases, we supplement the
program with a preferred alternate version that does not depend on the
output device type. For example, we provide a dir program much
like ls except that its default output format is always
multi-column format.
It is a good idea to follow the POSIX guidelines for the
command-line options of a program. The easiest way to do this is to use
getopt to parse them. Note that the GNU version of getopt
will normally permit options anywhere among the arguments unless the
special argument `--' is used. This is not what POSIX
specifies; it is a GNU extension.
Please define long-named options that are equivalent to the
single-letter Unix-style options. We hope to make GNU more user
friendly this way. This is easy to do with the GNU function
getopt_long.
One of the advantages of long-named options is that they can be
consistent from program to program. For example, users should be able
to expect the "verbose" option of any GNU program which has one, to be
spelled precisely `--verbose'. To achieve this uniformity, look at
the table of common long-option names when you choose the option names
for your program. The table appears below.
If you use names not already in the table, please send
`gnu@prep.ai.mit.edu' a list of them, with their meanings, so we
can update the table.
It is usually a good idea for file names given as ordinary arguments
to be input files only; any output files would be specified using
options (preferably `-o'). Even if you allow an output file name
as an ordinary argument for compatibility, try to provide a suitable
option as well. This will lead to more consistency among GNU
utilities, so that there are fewer idiosyncracies for users to
remember.
Programs should support an option `--version' which prints the
program's version number on standard output and exits successfully, and
an option `--help' which prints option usage information on
standard output and exits successfully. These options should inhibit
the normal function of the command; they should do nothing except print
the requested information.
- `auto-check'
- `-a' in
recode.
- `auto-reference'
- `-A' in
ptx.
- `after-date'
- `-N' in
tar.
- `all'
- `-a' in
du, ls, nm, stty, uname,
and unexpand.
- `all-text'
- `-a' in
diff.
- `almost-all'
- `-A' in
ls.
- `append'
- `-a' in
etags, tee, time;
`-r' in tar.
- `archive'
- `-a' in
cp.
- `arglength'
- `-l' in
m4.
- `ascii'
- `-a' in
diff.
- `assume-new'
- `-W' in Make.
- `assume-old'
- `-o' in Make.
- `backward-search'
- `-B' in etags.
- `batch'
- Used in GDB.
- `baud'
- Used in GDB.
- `before'
- `-b' in
tac.
- `binary'
- `-b' in
cpio and diff.
- `block-size'
- Used in
cpio and tar.
- `blocks'
- `-b' in
head and tail.
- `break-file'
- `-b' in
ptx.
- `brief'
- Used in various programs to make output shorter.
- `bytes'
- `-c' in
head, split, and tail.
- `c++'
- `-C' in
etags.
- `catenate'
- `-A' in
tar.
- `cd'
- Used in various programs to specify the directory to use.
- `changes'
- `-c' in
chgrp and chown.
- `classify'
- `-F' in
ls.
- `colons'
- `-c' in
recode.
- `command'
- `-c' in
su;
`-x' in GDB.
- `compare'
- `-d' in
tar.
- `compress'
- `-Z' in
tar.
- `concatenate'
- `-A' in
tar.
- `confirmation'
- `-w' in
tar.
- `context'
- Used in
diff.
- `copyright'
- `-C' in
ptx and recode.
- `core'
- Used in GDB.
- `count'
- `-q' in
who.
- `count-links'
- `-l' in
du.
- `create'
- Used in
tar and cpio.
- `cxref'
- `-x' in
etags.
- `date'
- `-d' in
touch.
- `debug'
- `-d' in Make and
m4;
`-t' in Bison.
- `define'
- `-D' in
m4.
- `defines'
- `-d' in Bison and
etags.
- `delete'
- `-D' in
tar.
- `dereference'
- `-L' in
chgrp, chown, cpio, du,
ls, and tar.
- `dereference-args'
- `-D' in
du.
- `diacritics'
- `-d' in
recode.
- `dictionary-order'
- `-d' in
look.
- `diff'
- `-d' in
tar.
- `digits'
- `-n' in
csplit.
- `directory'
- Specify the directory to use, in various programs. In
ls, it
means to show directories themselves rather than their contents. In
rm and ln, it means to not treat links to directories
specially.
- `discard-all'
- `-x' in
strip.
- `discard-locals'
- `-X' in
strip.
- `diversions'
- `-N' in
m4.
- `dry-run'
- `-n' in Make.
- `ed'
- `-e' in
diff.
- `elide-empty-files'
- `-z' in
csplit.
- `entire-new-file'
- `-N' in
diff.
- `environment-overrides'
- `-e' in Make.
- `eof'
- `-e' in
xargs.
- `epoch'
- Used in GDB.
- `error-limit'
- Used in Makeinfo.
- `error-output'
- `-o' in
m4.
- `escape'
- `-b' in
ls.
- `exclude-from'
- `-X' in
tar.
- `exec'
- Used in GDB.
- `exit'
- `-x' in
xargs.
- `expand-tabs'
- `-t' in
diff.
- `expression'
- `-e' in
sed.
- `extern-only'
- `-g' in
nm.
- `extract'
- `-i' in
cpio;
`-x' in tar.
- `faces'
- `-f' in
finger.
- `fast'
- `-f' in
su.
- `file'
- `-f' in
info, Make, mt, and tar;
`-n' in sed;
`-r' in touch.
- `file-prefix'
- `-b' in Bison.
- `file-type'
- `-F' in
ls.
- `files-from'
- `-T' in
tar.
- `fill-column'
- Used in Makeinfo.
- `flag-truncation'
- `-F' in
ptx.
- `fixed-output-files'
- `-y' in Bison.
- `follow'
- `-f' in
tail.
- `footnote-style'
- Used in Makeinfo.
- `force'
- `-f' in
cp, ln, mv, and rm.
- `format'
- Used in
ls, time, and ptx.
- `forward-search'
- `-F' in
etags.
- `fullname'
- Used in GDB.
- `gap-size'
- `-g' in
ptx.
- `get'
- `-x' in
tar.
- `graphic'
- `-i' in
ul.
- `graphics'
- `-g' in
recode.
- `group'
- `-g' in
install.
- `gzip'
- `-z' in
tar.
- `hashsize'
- `-H' in
m4.
- `header'
- `-h' in
objdump and recode
- `heading'
- `-H' in
who.
- `help'
- Used to ask for brief usage information.
- `hide-control-chars'
- `-q' in
ls.
- `idle'
- `-u' in
who.
- `ifdef'
- `-D' in
diff.
- `ignore'
- `-I' in
ls;
`-x' in recode.
- `ignore-all-space'
- `-w' in
diff.
- `ignore-backups'
- `-B' in
ls.
- `ignore-blank-lines'
- `-B' in
diff.
- `ignore-case'
- `-f' in
look and ptx;
`-i' in diff.
- `ignore-errors'
- `-i' in Make.
- `ignore-file'
- `-i' in
ptx.
- `ignore-indentation'
- `-S' in
etags.
- `ignore-init-file'
- `-f' in Oleo.
- `ignore-interrupts'
- `-i' in
tee.
- `ignore-matching-lines'
- `-I' in
diff.
- `ignore-space-change'
- `-b' in
diff.
- `ignore-zeros'
- `-i' in
tar.
- `include'
- `-i' in
etags;
`-I' in m4.
- `include-dir'
- `-I' in Make.
- `incremental'
- `-G' in
tar.
- `info'
- `-i', `-l', and `-m' in Finger.
- `initial'
- `-i' in
expand.
- `initial-tab'
- `-T' in
diff.
- `inode'
- `-i' in
ls.
- `interactive'
- `-i' in
cp, ln, mv, rm;
`-e' in m4;
`-p' in xargs;
`-w' in tar.
- `jobs'
- `-j' in Make.
- `just-print'
- `-n' in Make.
- `keep-going'
- `-k' in Make.
- `keep-files'
- `-k' in
csplit.
- `kilobytes'
- `-k' in
du and ls.
- `line-bytes'
- `-C' in
split.
- `lines'
- Used in
split, head, and tail.
- `link'
- `-l' in
cpio.
- `list'
- `-t' in
cpio;
`-l' in recode.
- `list'
- `-t' in
tar.
- `literal'
- `-N' in
ls.
- `load-average'
- `-l' in Make.
- `login'
- Used in
su.
- `machine'
- No listing of which programs already use this;
someone should check to
see if any actually do and tell
gnu@prep.ai.mit.edu.
- `macro-name'
- `-M' in
ptx.
- `mail'
- `-m' in
hello and uname.
- `make-directories'
- `-d' in
cpio.
- `makefile'
- `-f' in Make.
- `mapped'
- Used in GDB.
- `max-args'
- `-n' in
xargs.
- `max-chars'
- `-n' in
xargs.
- `max-lines'
- `-l' in
xargs.
- `max-load'
- `-l' in Make.
- `max-procs'
- `-P' in
xargs.
- `mesg'
- `-T' in
who.
- `message'
- `-T' in
who.
- `minimal'
- `-d' in
diff.
- `mode'
- `-m' in
install, mkdir, and mkfifo.
- `modification-time'
- `-m' in
tar.
- `multi-volume'
- `-M' in
tar.
- `name-prefix'
- `-a' in Bison.
- `new-file'
- `-W' in Make.
- `no-builtin-rules'
- `-r' in Make.
- `no-create'
- `-c' in
touch.
- `no-defines'
- `-D' in
etags.
- `no-dereference'
- `-d' in
cp.
- `no-keep-going'
- `-S' in Make.
- `no-lines'
- `-l' in Bison.
- `no-prof'
- `-e' in
gprof.
- `no-sort'
- `-p' in
nm.
- `no-split'
- Used in Makeinfo.
- `no-static'
- `-a' in
gprof.
- `no-time'
- `-E' in
gprof.
- `no-validate'
- Used in Makeinfo.
- `no-warn'
- Used in various programs to inhibit warnings.
- `node'
- `-n' in
info.
- `nodename'
- `-n' in
uname.
- `nonmatching'
- `-f' in
cpio.
- `nstuff'
- `-n' in
objdump.
- `null'
- `-0' in
xargs.
- `number'
- `-n' in
cat.
- `number-nonblank'
- `-b' in
cat.
- `numeric-sort'
- `-n' in
nm.
- `numeric-uid-gid'
- `-n' in
cpio and ls.
- `nx'
- Used in GDB.
- `old-archive'
- `-o' in
tar.
- `old-file'
- `-o' in Make.
- `one-file-system'
- `-l' in
tar, cp, and du.
- `only-file'
- `-o' in
ptx.
- `only-prof'
- `-f' in
gprof.
- `only-time'
- `-F' in
gprof.
- `output'
- In various programs, specify the output file name.
- `override'
- `-o' in
rm.
- `owner'
- `-o' in
install.
- `paginate'
- `-l' in
diff.
- `paragraph-indent'
- Used in Makeinfo.
- `parents'
- `-p' in
mkdir and rmdir.
- `pass-all'
- `-p' in
ul.
- `pass-through'
- `-p' in
cpio.
- `port'
- `-P' in
finger.
- `portability'
- `-c' in
cpio and tar.
- `prefix-builtins'
- `-P' in
m4.
- `prefix'
- `-f' in
csplit.
- `preserve'
- Used in
tar and cp.
- `preserve-environment'
- `-p' in
su.
- `preserve-modification-time'
- `-m' in
cpio.
- `preserve-order'
- `-s' in
tar.
- `preserve-permissions'
- `-p' in
tar.
- `print'
- `-l' in
diff.
- `print-chars'
- `-L' in
cmp.
- `print-data-base'
- `-p' in Make.
- `print-directory'
- `-w' in Make.
- `print-file-name'
- `-o' in
nm.
- `print-symdefs'
- `-s' in
nm.
- `question'
- `-q' in Make.
- `quiet'
- Used in many programs to inhibit the usual output. Note: every
program accepting `--quiet' should accept `--silent' as a
synonym.
- `quote-name'
- `-Q' in
ls.
- `rcs'
- `-n' in
diff.
- `read-full-blocks'
- `-B' in
tar.
- `readnow'
- Used in GDB.
- `recon'
- `-n' in Make.
- `record-number'
- `-R' in
tar.
- `recursive'
- Used in
chgrp, chown, cp, ls, diff,
and rm.
- `reference-limit'
- Used in Makeinfo.
- `references'
- `-r' in
ptx.
- `regex'
- `-r' in
tac.
- `release'
- `-r' in
uname.
- `relocation'
- `-r' in
objdump.
- `rename'
- `-r' in
cpio.
- `replace'
- `-i' in
xargs.
- `report-identical-files'
- `-s' in
diff.
- `reset-access-time'
- `-a' in
cpio.
- `reverse'
- `-r' in
ls and nm.
- `reversed-ed'
- `-f' in
diff.
- `right-side-defs'
- `-R' in
ptx.
- `same-order'
- `-s' in
tar.
- `same-permissions'
- `-p' in
tar.
- `save'
- `-g' in
stty.
- `se'
- Used in GDB.
- `sentence-regexp'
- `-S' in
ptx.
- `separate-dirs'
- `-S' in
du.
- `separator'
- `-s' in
tac.
- `sequence'
- Used by
recode to chose files or pipes for sequencing passes.
- `shell'
- `-s' in
su.
- `show-all'
- `-A' in
cat.
- `show-c-function'
- `-p' in
diff.
- `show-ends'
- `-E' in
cat.
- `show-function-line'
- `-F' in
diff.
- `show-tabs'
- `-T' in
cat.
- `silent'
- Used in many programs to inhibit the usual output.
Note: every program accepting
`--silent' should accept `--quiet' as a synonym.
- `size'
- `-s' in
ls.
- `sort'
- Used in
ls.
- `sparse'
- `-S' in
tar.
- `speed-large-files'
- `-H' in
diff.
- `squeeze-blank'
- `-s' in
cat.
- `starting-file'
- Used in
tar and diff to specify which file within
a directory to start processing with.
- `stop'
- `-S' in Make.
- `strict'
- `-s' in
recode.
- `strip'
- `-s' in
install.
- `strip-all'
- `-s' in
strip.
- `strip-debug'
- `-S' in
strip.
- `suffix'
- `-S' in
cp, ln, mv.
- `suffix-format'
- `-b' in
csplit.
- `sum'
- `-s' in
gprof.
- `summarize'
- `-s' in
du.
- `symbolic'
- `-s' in
ln.
- `symbols'
- Used in GDB and
objdump.
- `synclines'
- `-s' in
m4.
- `sysname'
- `-s' in
uname.
- `tabs'
- `-t' in
expand and unexpand.
- `tabsize'
- `-T' in
ls.
- `terminal'
- `-T' in
tput and ul.
- `text'
- `-a' in
diff.
- `time'
- Used in
ls and touch.
- `to-stdout'
- `-O' in
tar.
- `total'
- `-c' in
du.
- `touch'
- `-t' in Make,
ranlib, and recode.
- `trace'
- `-t' in
m4.
- `traditional'
- `-t' in
hello;
`-G' in m4 and ptx.
- `tty'
- Used in GDB.
- `typedefs'
- `-t' in
etags.
- `typedefs-and-c++'
- `-T' in
etags.
- `typeset-mode'
- `-t' in
ptx.
- `uncompress'
- `-z' in
tar.
- `unconditional'
- `-u' in
cpio.
- `undefine'
- `-U' in
m4.
- `undefined-only'
- `-u' in
nm.
- `update'
- `-u' in
cp, `etags', `mv', `tar'.
- `verbose'
- Print more information about progress. Many programs support this.
- `verify'
- `-W' in
tar.
- `version'
- Print the version number.
- `version-control'
- `-V' in
cp, ln, mv.
- `vgrind'
- `-v' in
etags.
- `volume'
- `-V' in
tar.
- `what-if'
- `-W' in Make.
- `width'
- `-w' in
ls and ptx.
- `word-regexp'
- `-W' in
ptx.
- `writable'
- `-T' in
who.
- `zeros'
- `-z' in
gprof.
Go to the previous, next section.