Вы разбалансировали Ваш \[
и \]
. Управляющие последовательности должны быть перенесены в них, так, чтобы удар знал, что они на самом деле не занимают места в Вашем терминале.
Попробуйте это:
PS1="\[\033[1;31m\][\[\033[1;33m\]\$(date +%H:%M)\[\033[1;31m\]] \u:\[\033[1;32m\]\W\[\033[1;37m\]\$\[\033[0m\] "
Решение @jw013 еще лучше, тем не менее, поскольку это намного более чисто.
Можно использовать ts
программа от moreutils для добавления метки времени к каждой строке.
{ echo foo; sleep 1; echo bar; } | ts
Dec 13 01:07:23 foo
Dec 13 01:07:24 bar
Читать из последовательного порта и производить в файл:
ts </dev/ttyS0 >arduino.log
(Замена /dev/ttyS0
правильным путем для устройства последовательного порта.)
Я рекомендовал бы http://elinux.org/Grabserial.
И форматирование ts вывод плюс, это добавляет точность большего количества времени.
ts [%H.%M.%.S]