Settings

Theme

Ask HN: Unix Utility Development Conventions

6 points by rayascott 6 years ago · 3 comments · 1 min read


I'm slowly hacking away at a zsh script that shows some promise as a command line tool. I want to learn more about the conventions regarding command line tool development in Unix (and/or macOS), but don't really know where to look for this information.

What is the correct way, or convention, to specify and parse command line arguments, for example? How should I package my tool? What is the best way to handle deployment of the various aspects of my tool, for example the man page, or configuration settings? How should I handle the upgrade process?

Smaller details, like should I store my source code in the repo with execute permissions turned on, or should I only turn on those permissions when the files are deployed on the user's machine? What group should I set as the default for my executable files?

Does anyone know any great resources out there that address these issues?

jolmg 6 years ago

> What is the correct way, or convention, to specify and parse command line arguments, for example?

I often use variations of this pattern:

  version=1.0.0

  usage() {
    cat << EOF
  USAGE: $0 {{-f|--file} <filename>}

  Some description.

  OPTIONS
    -h, --help
      Display this help.

    -v, --version
      Display version.

    -f <filepath>, --file <filepath>
      Specify input file.
  EOF
  }

  while (( $# )); do
    case "$1" in
      -h|--help)
        usage
        exit
      ;;

      -v|--version)
        printf "%s\n" "$version"
        exit
      ;;

      -f|--file)
        input_file="$2"
        shift
      ;;

      *)
        >&2 printf "Unknown option: %s\n" "$1"
        >&2 usage
        exit 1
      ;;
    esac
    shift
  done
There are standard guidelines[1][2].

[1] https://www.gnu.org/prep/standards/standards.html#Command_00...

[2] https://cli-guide.readthedocs.io/en/latest/design/guidelines...

tannhaeuser 6 years ago

https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1...

http://catb.org/~esr/writings/taoup/html/ch10s05.html

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection