Итак, у меня есть следующий файл со странным юникодным именем. Когда я выполняю команду find
для файла, он печатает ввод в терминал. Посмотрите на 62;c
внизу вывода. Почему это происходит? Это ошибка или преднамеренное? Я также получил похожий вывод при попытке дополнить табуляцию именем файла.
jeff@laptop:/tmp/x$ ls
057. Antonâ??â? n Dvoâ??ôâ??°k - Rusalka - MÆ?õsâ??â? Æ?çku Na Nebi Hlubokâ??©m.mp3
jeff@laptop:/tmp/x$ find
.
./057. Antonâ??â? n Dvoâ??ôâ??°k - Rusalka - MÆ?õsâ??â? Æ?çku Na Nebi Hlubokâ??©m.mp3�©m.mp3
jeff@laptop:/tmp/x$ 62;c
ls -ab показывает следующее:
057.\ Antonâ\302\210\302\232â\302\211 n\ Dvoâ\302\211\302\210ôâ\302\210\302\232°k\ -\ Rusalka\ -\ MÆ\302\222õsâ\302\210\302\232â\302\211 Æ\302\222çku\ Na\ Nebi\ Hlubokâ\302\210\302\232©m.mp3
Еще один фрагмент информации. Я вижу текст в «терминале», но не в «xterm».
Определенные escape-последовательности запрашивают у терминала (или эмулятора терминала) определенные параметры (такие как версия, функции, текущее состояние). Они, по замыслу, могут ответить только путем отправки ответа в качестве escape-последовательности , как если бы он был набран пользователем .
Чтобы попробовать, выполните, например,
echo -ne '\e[c'; sleep 100
и см. ^[[?62;c
(т. Е. ESC
, за которым следует литерал [?62;c
) и возврат на него, стирающий его во время работы sleep
, в точности , как если бы вы набрали this.
Альтернативная форма этой конкретной escape-последовательности, использующая управляющий код C1, а не C0 по умолчанию, который поддерживается только некоторыми эмуляторами терминала , если используется в UTF-8, является:
[ 111](см. Начало ctlseqs.html , почему xterm не поддерживает их.)
Ожидается, что любое приложение, генерирующее такой escape, будет ждать ответа и действовать в соответствии с ним. соответственно. В противном случае они должны быть достаточно осторожны, чтобы не производить такой вывод.
Для меня (Ubuntu 18.04), find
распознает оба из них и заменяет их вопросительными знаками, чтобы убедиться, что они не отправлены на терминал как есть. Возможно, вы используете более старую версию find
в более старой Ubuntu, которая еще не отфильтровала их должным образом, или вы можете столкнуться с другой escape-последовательностью, которая не отфильтрована (в этом последнем случае мы должны подать отчет об ошибке против findutils
). Нам нужно знать точное точное имя имени файла ( точная последовательность байтов), чтобы продолжить расследование.
ОБНОВЛЕНИЕ: Я только что обнаружил и подал соответствующую ошибку: https://savannah.gnu.org/bugs/?54236 . Не уверен, что вы попали в этот.