Con Perl:
perl -lne 'print for /{(.*?)}/g' file
port1 dev1 M1 s
port1 dev1 M1 s
port3 dev2 M1 g
port1 dev1 M1 d
port1 dev1 M3 g
O usando sed:
sed 's/{\([^}]*\)} */\1\n/; P;D' file
port1 dev1 M1 s
port1 dev1 M1 s
port3 dev2 M1 g
port1 dev1 M1 d
port1 dev1 M3 g
...
Zsh запускает некоторый код до и после каждой команды. Это обычно используется для обновления подсказки и заголовка терминала. Вполне вероятно, что часть этого кода ошибочна и изменяет переменную a
(, если это происходит только с a
), или иногда оценивает часть командной строки, когда этого не следует (, если это происходит с каждым именем переменной ). ].
Проверьте свои функции ловушки и отладочную ловушку:
which precmd
which preexec
which zshaddhistory
print -l $precmd_functions
print -l $preexec_functions
print -l $zshaddhistory_functions
which TRAPDEBUG
trap | grep DEBUG
Еще один способ получить представление о том, что происходит, — включить трассировку .
~ mary@advv
$ set -x
+ …
~ mary@advv
$ a=good
+ …
~ mary@advv
$ echo "$a"
evil
Код, который появляется вместо …
, — это хуки, о которых я упоминал выше, и какая-то их часть должна быть виновником.
Один из экспериментов, который может сузить круг,:
~ mary@advv
$ a=good; echo "$a"