Tato otázka zde již obsahuje odpovědi :Jak předat argument skriptu, který je vstupem do bash
(2 odpovědi)
Uzavřeno před 9 měsíci.
Linux
(2 odpovědi)
Uzavřeno před 9 měsíci.
Jak spustit bash skript s parametry:
./foo.sh a b c
Když je komprimován (např. pomocí xz
).
xzcat foo.sh | bash <<how_to_supply_here_parameters?>>
Konkrétní případ použití:
Vytvořil jsem velmi velký rmlint.sh
soubor a uložte jej komprimovaný:
time rmlint -o sh:stdout -c sh:hardlink|tee >( xz > rmlint.sh.xz )
Proto bych normálně provedl
./rmlint.sh -d -x -p
Soubor je však příliš velký na to, aby jej bylo možné dekomprimovat. Proto bych rád udělal to samé tím, že bych to převedl do bash:
xzcat rmlint.sh.xz | bash ...
Přijatá odpověď:
Měli byste použít -s
možnost a --
k oddělení argumentů, které chcete předat:
echo 'echo "[email protected]"' | sh -s 3 4 5
echo 'printf "{%s}" "$0"; printf " {%s}" "[email protected]"; echo' |
sh -s -- -d -x -p --foo=bar
{sh} {-d} {-x} {-p} {--foo=bar}
To by mělo fungovat s jakýmkoli shellem POSIX, nejen s bash
. Ze susv4:
-s
Číst příkazy ze standardního vstupu.Pokud neexistují žádné operandy a
-c
volba není specifikována,-s
se předpokládá možnost.