Scripting
有沒有辦法在沒有額外工具的情況下將可執行二進製文件嵌入到 shell 腳本中?
我正在尋找一種將可執行二進製文件硬連線到腳本中的方法。像這樣的東西:
#!/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 程式碼來管理圍繞它的處理。