Поместить некоторую шестнадцатеричную строку в 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, иначе процесс никогда не завершится.