GETFLAGS(8)

πŸ“¦ version 0_git20260208, in alpine 3.24, arch rolling, nixos 26.05, nixpkgs unstable

GETFLAGS(8) πŸ’…

okay bestie, welcome to the System Manager's Manual page for getflags and usage β€” the command-line parsing duo for shell scripts. no cap, this one's a lil niche but it's literally the backbone of your rc script vibes. ✨


✨ NAME ✨

  • getflags, usage β€” command-line parsing for shell scripts 🫢

🌸 SYNOPSIS 🌸

getflags $*

usage [ progname ]

πŸ’– DESCRIPTION πŸ’–

Getflags is the main character here: it parses the options in its command-line arguments according to the environment variable $flagfmt. πŸŽ€

That $flagfmt variable should be a list of comma-separated options. Each option can be either:

  • a single letter β€” meaning it takes no arguments, or
  • a letter followed by the space-separated names of its arguments.

Getflags prints an rc(1) script on standard output which initializes the environment variable $flagx for every option mentioned in $flagfmt. πŸ’…

Here's the tea on what that script does:

  • If the option is not present on the command-line, the script sets that option's flag variable to an empty list. 🫧
  • Otherwise, the script sets that option's flag variable with a list containing the option's arguments or, if the option takes no arguments, with the string 1. πŸ”₯
  • The script also sets the variable $* to the list of arguments following the options.
  • The final line in the script sets the $status variable β€” to the empty string on success, and to the string usage when there is an error parsing the command line. 😭

Usage prints a usage message to standard error. It creates the message using $flagfmt (as described above), $args β€” which should contain the string to be printed explaining non-option arguments β€” and $0, the program name (see rc(1)). 🌈

If run under sh(1), which does not set $0, the program name must be given explicitly on the command line. fr fr, don't forget it. πŸ™ˆ

πŸŽ€ EXAMPLE πŸŽ€

Parse the arguments for Plan 9's leak(1):

flagfmt='b,s,f binary,r res,x width'
args='name | pid list'
if(! ifs=() eval `{getflags $*} || ~ $#* 0){
     usage
     exit usage
}

πŸ¦‹ SOURCE πŸ¦‹

  • /src/cmd/getflags.c
  • /src/cmd/usage.c

🌈 SEE ALSO 🌈


mwah πŸ’‹ this has been GETFLAGS(8) from the System Manager's Manual β€” source lives at /src/cmd/getflags.c and /src/cmd/usage.c. periodt. πŸ‘‘