7 ms·
Ask HN: Unix Utility Development Conventions
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?
- tannhaeuser 7y agohttps://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_01 https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1... http://catb.org/~esr/writings/taoup/html/ch10s05.html http://catb.org/~esr/writings/taoup/html/ch10s05.html
- rayascott 7y agoThe Art of Unix Programming looks interesting, thanks!
- jolmg 7y 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_002dLine-Interfaces https://www.gnu.org/prep/standards/standards.html#Command_00... [2] https://cli-guide.readthedocs.io/en/latest/design/guidelines.html#id1 https://cli-guide.readthedocs.io/en/latest/design/guidelines...