簡體   English   中英

Bash腳本,可打印出一個二進制文件的內容,一次僅輸出一個單詞,而無需xxd

[英]Bash script that prints out contents of a binary file, one word at a time, without xxd

我想創建一個BASH腳本,該腳本逐字讀取二進制文件(32位),並將該字傳遞給名為devmem的應用程序。

現在,我有:

...
for (( i=0; i<${num_words}; i++ ))
do
    val=$(dd if=${file_name} skip=${i} count=1 bs=4 2>/dev/null)
    echo -e "${val}" # Weird output...
    devmem ${some_address} 32 ${val}
done
...

$ {val}具有一些奇怪的(ASCII?)格式字符表示形式,看起來像帶有問號的菱形。

如果我將“ val =“行替換為:

val=$(dd ... | xxd -r -p)

我得到了想要的輸出。

使用BASH復制xxd功能的最簡單方法是什么?

注意:我正在從事一個嵌入式Linux項目,該項目的要求不允許我安裝xxd。

這個腳本是性能驅動的,如果我的方法不對,請糾正我,但是由於這個原因,我選擇了(dd->二進制字-> devmem)而不是(hexdump->文件,解析文件-> devmem)。 -無論達到最終目標的最佳途徑,這項練習都會給我帶來一些麻煩,非常感謝有人幫助我弄清楚該如何做。

謝謝!

如我所見,您不應使用“ |” 或echo,因為它們都是ASCII工具。 相反,我認為“>”可以為您工作。
我認為devmem是bash函數或別名,因此我會嘗試如下操作:

for (( i=0; i<${num_words}; i++ ))
do
    dd if=${file_name} skip=${i} count=1 bs=4 2>/dev/null 1> binary_file
#    echo -e "${val}" # Weird output...
    devmem ${some_address} 32 $(cat binary_file)
done

“由於cat僅連接字節流,因此它也可以用於連接二進制文件,而二進制文件僅連接字節序列。” 維基

或者您可以更改devmem以接受文件作為輸入...我希望這會有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM