我需要將二進制數據傳遞給接受命令行參數的bash程序。有沒有辦法做到這一點?在bash中傳遞二進制數據作爲參數
這是一個接受一個參數的程序:
script arg1
但
不是字符串arg1
,我想通過一些字節是不好的ASCII字符 - 特別是字節
0x02
,
0xc5
和
0xd8
。
我該怎麼做?
我需要將二進制數據傳遞給接受命令行參數的bash程序。有沒有辦法做到這一點?在bash中傳遞二進制數據作爲參數
這是一個接受一個參數的程序:
script arg1
但
不是字符串arg1
,我想通過一些字節是不好的ASCII字符 - 特別是字節
0x02
,
0xc5
和
0xd8
。
我該怎麼做?
script "`printf "\x02\xc5\xd8"`"
script "`echo -e "\x02\xc5\xd8"`"
測試:
# echo -n "`echo -e "\x02\xc5\xd8"`" | hexdump -C
00000000 02 c5 d8 |...|
這個怎麼樣?
$ script "`printf "\x02\xc5\xd8"`"
你不想bash的處理說法......'劇本 「\'printf的 」\ X02 \ XC5 \ XD8「 \'」' – 2012-02-28 17:49:27
@yi_H好點。修復應用,這直接導致你的答案:) – 2012-02-28 18:02:10
保存二進制數據到一個文件,然後執行:
script "`cat file`"
@downvoter:這個答案有什麼問題? – 2012-02-28 17:49:54
UUOC。怎麼樣腳本$(<文件)或腳本「$(<文件)」(取決於你是否要分詞出現)。 – jordanm 2012-02-28 17:50:21
我沒有downvote,但看到我的評論在其他答案 – 2012-02-28 17:50:57
Bash是不擅長處理二進制數據。我會建議使用base64對它進行編碼,然後在腳本內部解碼它。
編輯,以提供一個例子:
script "$(printf '\x02\xc5\xd8' | base64 -)"
裏面的腳本:
var=$(base64 -d -i <<<"$1")
同意。我還沒有找到任何方法讓bash在字符串中處理零字節(\ x00),並且它傾向於添加/刪除尾隨的換行符(\ x0a),因爲它認爲是最好的 - 在處理任意二進制文件時,兩者都非常糟糕數據。 – 2012-02-28 18:14:20
使用$''
報價方式:
script $'\x02\xc5\xd8'
測試:
printf $'\x02\xc5\xd8' | hexdump -C
00000000 02 c5 d8
我相信你的測試等效於簡單的'echo -ne「\ x02 \ xc5 \ xd8」| hexdump -C' :-) – elimisteve 2012-11-29 05:27:20
不完全...在這裏我試圖模擬'script'的實際調用,用'echo -n'替換它 – 2012-11-29 12:04:47