Я пытался воссоздать результаты в докере Alpine 3.9 с различными вариантами shell / grep, выходя и запуская новый контейнер для каждого теста, затем дважды проверял.
Вот что у меня есть:
- Alpine 3.9, пепел, grey BusyBox: не в порядке.
- Alpine 3.9, bash, grep BusyBox: не в порядке.
- Alpine 3.9, ash, GNU grep: OK.
- Alpine 3.9, bash, GNU grep: OK.
- Alpine 3.9, ash, BusyBox
grep -F
: OK.
Таким образом, похоже, что grep действительно является основной причиной различия, и способ, которым он обрабатывает двоичный вывод из nc.
С Alpine 3.9 и GNU grep, если мы опускаем-q
и echo, мы получим следующий вывод:
Двоичный файл (стандартный ввод) соответствует
Это может означать, что GNU и BusyBox grep могут обрабатыватьбинарные файлы по-разному.
Просматривая через grep BusyBox, https://github.com/mirror/busybox/blob/master/findutils/grep.c,, мы можем найти следующие комментарии в списке параметров grep:
/* ignored: -a "assume all files to be text" */
/* ignored: -I "assume binary files have no matches" */
Так что, осторожно оценив, BusyBox grep всегда будетдать нулевые результаты для двоичных данных (с параметрами по умолчанию) - это хорошо объясняет поведение.
При -F
- "fgrep mode", grey BusyBox будет сопоставлять "players":
буквально с потоком двоичных символов, так что это работает.