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"
Если cdrecord
установлен правильно или вызывается пользователем root по мере необходимости, cdrecord
всегда ставит себя в наивысший приоритет в реальном времени и блокирует память.
Это дает cdrecord
наилучшие условия для письма.
Вы, к сожалению, не упомянули операционную систему, поэтому могу дать только общий совет.
cdrecord
всегда требуются специальные системные привилегии, чтобы иметь возможность отправлять любую команду SCSI на любое устройство SCSI.
Чтобы получить специальные системные привилегии в обычной системе UNIX, вы устанавливаете cdrecord
suid root, чтобы предоставить ему все доступные привилегии.
В Solaris вы предоставляете пользователю cdrecord
точно необходимые детализированные привилегии, делая соответствующие записи в базе данных pfexec
в /etc/security
.
В последних версиях Linux вы можете предоставить соответствующие детализированные возможности с помощью команды setcap
.
Если вы, например. запустить непривилегированный cdrecord в Linux,вы получите следующий результат:
cdrecord -scanbus
Cdrecord-ProDVD-ProBD-Clone 3.02a10 2021/07/23 (x86_64-unknown-linux-gnu) Copyright (C) 1995-2019 Joerg Schilling
cdrecord: Insufficient 'file read' privileges. You will not be able to open all needed devices.
cdrecord: Insufficient 'file write' privileges. You will not be able to open all needed devices.
cdrecord: Insufficient 'device' privileges. You may not be able to send all needed SCSI commands, this my cause various unexplainable problems.
cdrecord: Insufficient 'memlock' privileges. You may get buffer underruns.
cdrecord: Insufficient 'priocntl' privileges. You may get buffer underruns.
cdrecord: Insufficient 'network' privileges. You will not be able to do remote SCSI.
cdrecord: Keine Berechtigung. Cannot open '/dev/sg0'. Cannot open or use SCSI driver.
cdrecord: For possible targets try 'cdrecord -scanbus'. Make sure you are root.
cdrecord: For possible transport specifiers try 'cdrecord dev=help'.
, который напоминает вам о необходимости запустить cdrecord с необходимыми привилегиями.
Так что просто используйте недавний cdrecord
, и он сделает все правильно для вас.