GNU/Linux >> Znalost Linux >  >> Linux

Jak vložit spustitelný binární soubor do skriptu Shell bez dalších nástrojů?

Hledám způsob, jak mít spustitelný binární soubor pevně zapojený do skriptu. Něco jako toto:

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

Našel jsem toto řešení, které používá uuencode a je dobrý. Ale záleží na shrutils , které se zdají být navíc, protože nejsou standardně součástí mého Debianu.

Přemýšlel jsem o binárním kódování pomocí base64 a pak to dekódovat a nějak spuštění, případně bez vytváření jakýchkoli dočasných souborů. Pamatuji si, že existovala knihovna, která je zodpovědná za provádění věcí, ale zapomněla jsem, co to bylo.

Možná by bylo nejlepší mít konstrukci tak jednoduchou, jako je tato:

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

Přijatá odpověď:

Co třeba:

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

Pokud nechcete mít ve skriptu binární data, můžete je zakódovat a nahradit cat příslušným dekodérem.

Všimněte si, že musíte nahradit +9 podle čísla řádku, kde binární soubor začíná v případě, že upravíte skript tak, aby měl jinou délku.

Pokud váš tail implementace nepodporuje argument +9 , zkuste -n +9 místo toho.

Pokud se bojíte zablokování existujícího souboru /tmp, zkuste použít mktemp(1) pro vytvoření názvu souboru tmp.

Všimněte si, že tuto metodu používaly upgradovací skripty pro SunPro sada kompilátorů, která zahrnovala komprimovaný archiv tar s celým upgradem a nějaký shell kód pro správu manipulace s tím.


Linux
  1. Určit prostředí ve skriptu za běhu?

  2. Určení cesty ke zdrojovému skriptu Shell?

  3. Linux – Jak otestovat, zda byl binární soubor Linuxu zkompilován jako kód nezávislý na pozici?

  1. Jak zajistit, aby skript Shell vždy běžel jako root?

  2. Význam $? Ve skriptu Shell?

  3. Jak rozebrat binární spustitelný soubor v Linuxu, abyste získali kód sestavení?

  1. Převeďte binární data na hexadecimální ve skriptu shellu

  2. Shell skript funguje dobře bez řádky shebang? Proč?

  3. Jak získat výstupní kód vytvořeného procesu ve skriptu očekávaného shellu?