I have an sample module
-module(helloworld). -compile(export_all). main() -> io:format("~s~s~s~n",["\e[31m","Hello world!","\e[0m"]).
When I build:
erlc helloworld.erl
After that, I run:
erl -noshell -s helloworld main -s init stop Hello world! (with red color)
erl -noshell -s helloworld main -s init stop > text.txt ^[[31mHello world!^[[0m (The content in text.txt is ugly, so I don't like).
My problem is:
- How to know when user redirect output from erlang shell into a file?
- How can I write to text.txt the content just "Hello world!" not "^[[31mHello world!^[[0m"
Thanks.
I'm using
io:rows/0
that returns{ok, Number}
if it is a terminal or{error, enotsup}
if it is not. More information here.Have a look to http://www.erlang.org/doc/man/init.html#get_arguments-0, you can check for the existence of "noshell" flag there an adopt output accordingly.
[{root,["/opt/local/lib/erlang"]},{progname,["erl"]},{home,["/Users/..."]},{noshell,[]}]]},{helloworld,main,0},{init,start_it,1},{init,start_em,1}]
Thanks, but I don't think that can solve my problem. I use isatty in C library and solved it.