https://blog.tdevin.com/posts/command-line-programming/