Linux

如何使 hexdump 不等待來自標準輸入的 16 個字元來顯示其十六進制值?

  • December 14, 2020

如果我hexdump在終端中沒有任何參數打開:

hexdump

當我在終端中輸入內容並按Enter時,hexdump將顯示我輸入的任何字元的十六進制值。

hexdump如果我輸入 16 個字元,只會顯示十六進制值,例如:

在此處輸入圖像描述

在這裡,我輸入了a15 次字元並按下Enter(因此hexdump收到 16 個字元 (15 a+ \n))。

但如果我輸入少於 16 個字元,例如:

在此處輸入圖像描述

在這裡,我輸入了a14 次字元並按下Enter(因此hexdump收到 15 個字元 (14 a+ \n))。在這種情況下hexdump沒有顯示任何東西。

我可以hexdump顯示接收到的任何長度字元的十六進制值,而不是等待接收 16 個字元嗎?

注意:我不想“使用 hexdump 和 xxd 的選項來將一個字節顯示為每行的十六進制”(如此處的評論中所建議的那樣)。我想要做的基本上是例如知道 A 的十六進制值是什麼,而不必輸入額外的 15 個字元來獲取它。

試試hexdump -v -e '/1 "%02X\n"'。每行顯示一個十六進製字節,因此行輸出緩沖不會阻止行顯示。

然後您只需鍵入 A 並返回即可知道 A 的十六進制值。您仍然必須鍵入 return,因為 shell 緩衝區還對輸入進行行緩衝。

man ascii也有效。:-)

可以將無緩衝包裝 hexdump 寫入到 stdbuf 的同一行。Bash 範例(由於某些讀取命令選項而需要它):

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

引用自:https://unix.stackexchange.com/questions/402452