(2 respuestas)
Cerrado hace 9 meses.
Cómo ejecutar bash script con parámetros:
./foo.sh a b c
Cuando está comprimido (por ejemplo, usando xz
).
xzcat foo.sh | bash <<how_to_supply_here_parameters?>>
Caso de uso específico:
Produje un rmlint.sh
muy grande archivo y almacenarlo comprimido:
time rmlint -o sh:stdout -c sh:hardlink|tee >( xz > rmlint.sh.xz )
Por lo tanto, normalmente ejecutaría
./rmlint.sh -d -x -p
Sin embargo, el archivo es demasiado grande para descomprimirlo. Por lo tanto, me encantaría hacer lo mismo canalizándolo a bash:
xzcat rmlint.sh.xz | bash ...
Respuesta aceptada:
Debes usar -s
opción y --
para separar los argumentos que desea pasar:
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}
Esto debería funcionar con cualquier shell POSIX, no solo con bash
. Desde susv4:
-s
Leer comandos desde la entrada estándar.
Si no hay operandos y -c
no se especifica la opción, el -s
se asumirá la opción.