2013-08-28 50 views
0

我想要創建一個BASH腳本,它可以通過單詞讀取二進制文件,單詞(32位),並將該單詞傳遞給一個名爲devmem的應用程序。打印出二進制文件內容的Bash腳本,一次只能顯示一個單詞,沒有xxd

現在,我有:

... 
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 - > binary word - > devmem)而不是(hexdump - > file,parse file - >)這個腳本是性能驅動的,如果我在我的方法中錯了,請糾正我的錯誤,但是因爲這個原因,我選擇了dd-> binary word-> devmem) devmem)。不管最終目標的最佳路線如何,這個練習都給了我一些麻煩,我非常感謝有人幫我弄清楚如何做到這一點。

謝謝!

+0

如果輸入文件是二進制文件,我希望'$ val'有一個「怪異」的外觀,如果你做了'echo $ val',因爲'$ val'會直接從文件中獲得二進制信息, 'echo'會顯示它,就好像它們是ASCII碼一樣(無論它們是否可打印)。所以我不確定爲什麼用'xxd -r -p'(它做一個反向十六進制轉儲 - 採用ASCII十六進制並給二進制 - 與我以爲你會想要的相反)爲您提供了所需的結果。 – lurker

回答

0

正如我看到你不應該使用'|'或回聲,因爲它們都是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 

「作爲貓只是catenates字節流,它也可以用來連接二進制文件,其中它只會連接字節序列。「wiki

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

相關問題