Scripting

有沒有辦法在沒有額外工具的情況下將可執行二進製文件嵌入到 shell 腳本中?

  • March 27, 2021

我正在尋找一種將可執行二進製文件硬連線到腳本中的方法。像這樣的東西:

#!/bin/bash
...some shell code
execute binary:
   >>>
       binary
       code
       ...
   <<<
...some more shell code possibly

我找到了這個解決方案,它使用uuencode並且很好。但這取決於shrutils,這似乎是額外的,因為預設情況下它們不包含在我的 Debian 中。

我一直在考慮用二進制編碼base64然後解碼它並以某種方式執行,可能不創建任何臨時文件。我記得有一個庫負責執行事情,但忘記了它是什麼。

最好有一個像下面這樣簡單的構造:

$ <(base64 out | base64 -d)
bash: /dev/fd/63: Permission denied

怎麼樣:

unpack() {
   tail +9 "$0" > /tmp/xxx.$$
   chmod +x /tmp/xxx.$$
}
unpack
/tmp/xxx.$$ <add args here>
rm /tmp/xxx.$$
exit
<add the binary here>

如果您不喜歡腳本中有二進制數據,您可以對其進行編碼並替換cat為相關的解碼器。

請注意,如果+9您將腳本修改為不同的長度,則需要將 替換為二進製文件開始的行號。

如果您的tail實現不支持參數+9,請嘗試-n +9

如果您擔心破壞現有的 /tmp 文件,請嘗試使用mktemp(1)來創建 tmp 文件名。

請注意,此方法由SunPro編譯器套件的升級腳本使用,其中包括帶有整個升級的壓縮 tar 存檔和一些 shell 程式碼來管理圍繞它的處理。

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