Поместить некоторую шестнадцатеричную строку в xxd, используя stdin, не генерирует никакого вывода

У меня проблема со сбором данных по xxd из stdin. Вот команда:

xxd -r -p | dd of=/home/user/test/hex.bin obs=16

когда я выполняю эту команду в оболочке, она ждет ввода. Я попытался поставить '0006303030304e430006303030304e43', затем нажать Enter, но похоже, что xxd не получил мой ввод или не передал вывод на dd.

Например, это работает отлично:

echo '0006303030304e430006303030304e43' | xxd -r -p | dd of=/home/user/test/hex.bin obs=16

Чего я хочу добиться: я хочу поместить некоторую шестнадцатеричную строку, преобразовать ее в двоичный файл и затем сохранить в файл в 16-битном блоке. Скрипт должен постоянно слушать stdin.

Xxd работает таким образом? Я попытался поместить \n или \r\n в конец шестнадцатеричной строки, но все еще ничего не было в xxd выводе.

Спасибо за любую помощь.

С наилучшими пожеланиями!

3 ответа

Просто добавить - в xxd -r -p команда такая, что выглядит так:

echo '0006303030304e430006303030304e43' | xxd -r -p - | dd of=/home/user/test/hex.bin obs=16

Я нашел это на странице руководства для xxd; более конкретно, OPTIONS раздел:

Если infile указан как - символ, то ввод берется из стандартного ввода.

xxd все еще ждет ввода; введите Control-D после того, как вы нажмете Enter, чтобы "закрыть" входной файл.

Если вы не завершаете стандартный ввод с помощью Ctl-D, вам нужно подавать его до тех пор, пока буферы не заполнят канал, прежде чем что-либо перейдет к следующему процессу. В конце концов вам все равно придется ввести Ctl-D, иначе процесс никогда не завершится.

Другие вопросы по тегам