hexdump가 stdin의 16문자가 16진수 값을 표시할 때까지 기다리지 않게 하려면 어떻게 해야 합니까?

hexdump가 stdin의 16문자가 16진수 값을 표시할 때까지 기다리지 않게 하려면 어떻게 해야 합니까?

hexdump인수 없이 터미널을 열면 :

hexdump

터미널에 무언가를 입력하고 키를 누르면 Enter입력 hexdump한 문자의 16진수 값이 표시됩니다.

그러나 hexdump16자를 입력하면 16진수 값만 표시됩니다. 예를 들면 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

a여기서는 문자를 15번 입력 하고 눌렀습니다 Enter(그래서 hexdump16자가 수신되었습니다(15 a+ \n)).

하지만 예를 들어 16자 미만을 입력하면 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

여기서는 문자를 a14번 입력하고 눌렀습니다 Enter(그래서 hexdump15자가 수신되었습니다(14 a+ \n)). 이 경우 hexdump아무것도 표시되지 않습니다.

hexdump16자가 수신될 때까지 기다리는 대신 수신된 길이 문자의 16진수 값을 표시 할 수 있습니까 ?

노트: 하고 싶지 않다"xxd 옵션과 함께 hexdump를 사용하여 행당 1바이트를 16진수로 표시합니다."(여기 댓글에서 제안된 대로). 제가 하고 싶은 것은 기본적으로 A의 16진수 값을 얻기 위해 추가로 15자를 입력하지 않고도 알 수 있는 것입니다.

답변1

노력하다 hexdump -v -e '/1 "%02X\n"'. 라인당 하나의 16진수 바이트가 표시되므로 라인 출력 버퍼링은 라인 표시를 방해하지 않습니다.

그런 다음 A를 입력하고 A의 16진수 값을 확인하기 위해 돌아갑니다. 쉘 버퍼도 입력을 라인 버퍼하기 때문에 여전히 return을 입력해야 합니다.

man ascii또한 작동합니다. :-)

답변2

동일한 라인의 버퍼링되지 않은 팩형 16진수 덤프를 stdbuf에 작성할 수 있습니다. Bash 예(일부 읽기 명령 옵션으로 인해 필요):

while read -s -n1 k; do printf $k; done | stdbuf -o0 hexdump -e '1/1 "%x"'

관련 정보