Разрешено ли оболочкам игнорировать байты NUL в сценариях?

В корневой файловой системе есть каталог boot.

find [...] -maxdepth 2
Однако

не должен отображать содержимое /boot.

6
27.11.2019, 02:42
1 ответ

Причина такого поведения немного сложна...

Во-первых, современные оболочки включают проверку потенциально двоичных файлов (, содержащих нулевые байты ), но эта проверка проверяет только первую строку из файла. Вот почему «#» в первой строке меняет поведение. Историческая оболочка Bourne Shell не имеет этой двоичной проверки и даже не нуждается в «#», чтобы вести себя так, как вы упомянули.

Затем специальный метод, используемый оболочкой Bourne для поддержки многобайтовых символов через mbtowc(), просто пропускает все нулевые байты, потому что mbtowc()возвращает длину символа 0 для нулевого байта, и это заставляет цикл повторять попытку следующего символа.

Оболочка Bourne представила такой код примерно в 1988 году, и, возможно, другие оболочки скопировали его поведение.

1
27.01.2020, 20:23

Теги

Похожие вопросы