Alex Waite <alexqw85@xxxxxxxxx> wrote: |I come here in search of someone who understands dash/portable scripting |better than I do. Today, my Google-foo is failing me. | |I am in the process of cleaning up someone else's semi-portable shell |script (originally written on FreeBSD). The original script uses colors, |in the form of | |echo -e "\e[1;32mpassed\e[0m" | |"echo" should be avoided in general and any option passed to "echo" is |non-portable. In bash, I can easily port this to printf | |printf '%b' "\x1b[32;1mpassed\x1b[0m\n" | |However, this approach does not work in dash. I have read both the echo |and printf sections of the dash manual, and it seems that both "\e" and |"\x" are unsupported. Using "%b" allows additional backslash-escape |sequences, but only \c and \0. | |I know the purpose of dash is to provide an efficient POSIX compliant |shell. Is there really no POSIX compliant way to use color? It seems |so... 80s. Dash's manpage does state that it supports "backslash |notation as defined in ANSI X3.159-1989 (“ANSI C89”)", but I can't find |a copy of ANSI C89 online to confirm whether it includes display |attributes. ANSI C89 is old, but still... too old for color? Colours have nothing to do with the C programming language, they are an attribute of ISO 6429/ECMA-48 capable terminals. |Am I somehow missing some hidden functionality in printf, or is there |really no POSIX compliant method of printing colors, or is Dash simply |incomplete with its POSIX support in this regard? | |Any insight is most appreciated. $ /usr/bin/dash -c 'printf "[32;1mpassed[0m"' (i.e., the plain control character U+001B, ESCAPE) works for me, also on mksh(1), ksh(1), bash(1), and old Bourne shells that effectively go through my /usr/bin/printf. |---Alex --steffen -- To unsubscribe from this list: send the line "unsubscribe dash" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html