I am looking for a definitive way to build shell scripts that generates colored output.
Unfortunately I am having a hard time finding an appropriate lib or good technique for doing this. I found a lot of helpful but simple examples like this. Also the most comprehensive guide that I found until now is this one.
Before I start writing my own library, I want to check if anyone already wrote it
If your solution does not fit into the observations below thats not a problem. I would like also to read it so it can help me out if decide to write my own solution
My main concerns/observations:
- Needs to be safe. Want to avoid garbage output as not all terminals or pagers/editors (like less, more, vim, and so on) support colored output or more styled output (bold, blinked, italic, etc)
- Needs to be easy and readable. Using ANSI escape codes directly is horrible:
echo -e '\033[32mthis is ugly and \033[1;32mvery green\033[0m'
- Needs to give me access to the whole color palette and styles for foreground and background text. Most of the examples I found uses only the basic colors for foreground text only.
- Its preferable to use only simple commands like bash or simpler shells built in commands and/or common commands that can be found on most operating systems. For instance I can use colorize but I would need ruby (that's somewhat ok) and the colorize gem installed (not ok)
- Tput seems to be a good option as it can manipulate the shell cursor quite well, but it is somewhat simpler/less flexible
Edit
After some research on terminal control and output formatting, I am writing this gist that tries to accomplish this. So far it is doing quite well