2012-02-28 99 views
19

我需要將二進制數據傳遞給接受命令行參數的bash程序。有沒有辦法做到這一點?在bash中傳遞二進制數據作爲參數

這是一個接受一個參數的程序:

script arg1 

不是字符串 arg1,我想通過一些字節是不好的ASCII字符 - 特別是字節 0x020xc50xd8

我該怎麼做?

回答

16
script "`printf "\x02\xc5\xd8"`" 
script "`echo -e "\x02\xc5\xd8"`" 

測試:

# echo -n "`echo -e "\x02\xc5\xd8"`" | hexdump -C 
00000000 02 c5 d8           |...| 
+2

我相信你的測試等效於簡單的'echo -ne「\ x02 \ xc5 \ xd8」| hexdump -C' :-) – elimisteve 2012-11-29 05:27:20

+2

不完全...在這裏我試圖模擬'script'的實際調用,用'echo -n'替換它 – 2012-11-29 12:04:47

0

這個怎麼樣?

$ script "`printf "\x02\xc5\xd8"`" 
+3

你不想bash的處理說法......'劇本 「\'printf的 」\ X02 \ XC5 \ XD8「 \'」' – 2012-02-28 17:49:27

+0

@yi_H好點。修復應用,這直接導致你的答案:) – 2012-02-28 18:02:10

-1

保存二進制數據到一個文件,然後執行:

script "`cat file`" 
+0

@downvoter:這個答案有什麼問題? – 2012-02-28 17:49:54

+0

UUOC。怎麼樣腳本$(<文件)或腳本「$(<文件)」(取決於你是否要分詞出現)。 – jordanm 2012-02-28 17:50:21

+0

我沒有downvote,但看到我的評論在其他答案 – 2012-02-28 17:50:57

5

Bash是不擅長處理二進制數據。我會建議使用base64對它進行編碼,然後在腳本內部解碼它。

編輯,以提供一個例子:

script "$(printf '\x02\xc5\xd8' | base64 -)" 

裏面的腳本:

var=$(base64 -d -i <<<"$1") 
+2

同意。我還沒有找到任何方法讓bash在字符串中處理零字節(\ x00),並且它傾向於添加/刪除尾隨的換行符(\ x0a),因爲它認爲是最好的 - 在處理任意二進制文件時,兩者都非常糟糕數據。 – 2012-02-28 18:14:20

17

使用$''報價方式:

script $'\x02\xc5\xd8' 

測試:

printf $'\x02\xc5\xd8' | hexdump -C 
00000000 02 c5 d8