Solved: Expect – avoid sending escape prompt sequences via ssh


The script is intended to retrieve the contents of some directory when it is getting full.
For development, the ‘full’ was set at 15%, the directory is /var/crash.
The output of the script is:
As can be seen, although $d is /var/crash, when it is sent via ssh it becomes something like \u001b[01;31m\u001b[K/var\u001b[m\u001b[K/crash.
I cannot change the remote machine definitions for the command prompt.
How to get rid of these escape sequences that are sent?
Edit: Info about $full as requested
The proc analyze just tries to filter meaningful data.
The extract about the $full that was missing.
Taking the suggestion received, perhaps it’s grep that is adding the escape sequences, no?

Best Answer:

You don’t show how $full gets its value. But it must already have the escape codes. When printing $d those escape codes are interpreted by the terminal, so they may not be obvious. But Expect/Tcl definitely doesn’t insert them. This is also confirmed by the braces around the first element when you print $dir. If this element was plain /var/crash, there would be no braces.
Your remark about the command prompt would suggest that $full may be taken from there. Maybe you cannot permanently change the remote machine’s command prompt, but you should be able to change it for your session by setting the PS1 environment variable.
Another trick that may help in such situations is to do set env(TERM) dumb before spawning the ssh command. If the prompt (or other tools) correctly use the tput command to generate their escape codes, a dumb terminal will result in empty strings. This won’t work if the escape codes are hard-coded for one specific TERM. But that’s a bug on the remote side.

If you have better answer, please add a comment about this, thank you!